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)-> Int
switch (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 = 15
10 - 5 = 5
在函数嵌套中,默认情况下嵌套函数的作用域在外函数体内,但我们可以定义外函数的返回值类型为嵌套函数类型,从而将嵌套函数传递给外函数,被其他调用者使用。