9.6 嵌套函数

在此之前我们定义的函数都是全局函数,它们定义在全局作用域中,我们也可以把函数定义在另外的函数体中,称作嵌套函数

下面我们来看一个示例:

  1. func calculate(opr :String)-> (Int,Int)-> Int {
  2. //定义+函数
  3. func add(a:Int, b:Int) -> Int {
  4. return a + b
  5. }
  6. //定义-函数
  7. func sub(a:Int, b:Int) -> Int
  8. return a - b
  9. }
  10. var result : (Int,Int)-> Int
  11. switch (opr) {
  12. case "+" :
  13. result = add
  14. case "-" :
  15. result = sub
  16. default:
  17. result = add
  18. }
  19. return result
  20. }
  21. let f1:(Int,Int)-> Int = calculate("+")
  22. println("10 + 5 = \(f1(10,5))")
  23. let f2:(Int,Int)-> Int = calculate("-")
  24. println("10 + 5 = \(f2(10,5))")

上述代码第①行定义了calculate函数,它的作用是根据运算符进行数学计算,参数opr是运算符,返回值是函数类型(Int,Int)-> Int。在calculate函数体内,第②行定义了嵌套函数add,对两个参数进行加法运算。第③行定义了嵌套函数sub, 对两个参数进行减法运算。第④行代码是在运算符为“+”号的情况下将add函数名赋值给函数类型变量result,第⑤行代码是在运算符为“-”号的情况下将sub函数名赋值给函数类型变量result。第⑥行代码返回函数变量result,第⑦行代码调用calculate函数进行加法运算。第⑧行代码调用calculate函数进行减法运算。

程序运行结果如下:

  1. 10 + 5 = 15
  2. 10 - 5 = 5

在函数嵌套中,默认情况下嵌套函数的作用域在外函数体内,但我们可以定义外函数的返回值类型为嵌套函数类型,从而将嵌套函数传递给外函数,被其他调用者使用。