9.6 嵌套函数
在此之前我们定义的函数都是全局函数,它们定义在全局作用域中,我们也可以把函数定义在另外的函数体中,称作嵌套函数。
下面我们来看一个示例:
func calculate(opr :String)-> (Int,Int)-> Int { ①//定义+函数func add(a:Int, b:Int) -> Int { ②return a + b}//定义-函数func sub(a:Int, b:Int) -> Int ③return a - b}var result : (Int,Int)-> Intswitch (opr) {case "+" :result = add ④case "-" :result = sub ⑤default:result = add ⑥}return result ⑦}let f1:(Int,Int)-> Int = calculate("+") ⑧println("10 + 5 = \(f1(10,5))")let f2:(Int,Int)-> Int = calculate("-") ⑨println("10 + 5 = \(f2(10,5))")
上述代码第①行定义了calculate函数,它的作用是根据运算符进行数学计算,参数opr是运算符,返回值是函数类型(Int,Int)-> Int。在calculate函数体内,第②行定义了嵌套函数add,对两个参数进行加法运算。第③行定义了嵌套函数sub, 对两个参数进行减法运算。第④行代码是在运算符为“+”号的情况下将add函数名赋值给函数类型变量result,第⑤行代码是在运算符为“-”号的情况下将sub函数名赋值给函数类型变量result。第⑥行代码返回函数变量result,第⑦行代码调用calculate函数进行加法运算。第⑧行代码调用calculate函数进行减法运算。
程序运行结果如下:
10 + 5 = 1510 - 5 = 5
在函数嵌套中,默认情况下嵌套函数的作用域在外函数体内,但我们可以定义外函数的返回值类型为嵌套函数类型,从而将嵌套函数传递给外函数,被其他调用者使用。
