教程里面的一个例子:
func stepForward(input:Int) ->Int{
return input + 1
}
func stepBackward(input:Int) ->Int{
return input - 1
}
func chooseStepFunction(backwards:Bool) ->(Int) ->Int{
return backwards ? stepBackward : stepForward
}
var currentValue = 3
let moveNearerToZero = chooseStepFunction(currentValue>0)
println("Counting to zero:")
while currentValue != 0{
println("\(currentValue)")
currentValue = moveNearerToZero(currentValue)
}
println("zero")
不理解的地方是: 带着 Bool
值参数的 chooseStepFunction
赋给了moveNearerToZero
, 为什么后面 while 循环里面 moveNearToZero
还能带着一个 int 值参数来传递? 因为我看见chooseStepFunction传入参数定义的是一个 Bool
类型的参数.
chooseStepFunction
是个返回函数的函数(其类型准确说来是:接受一个Bool型参数,并返回一个函数,该函数接受一个Int型变量并返回一个Int值),如果参数backwards
为真就返回stepBackward
,否则就返回stepForward
。因而实际上moveNearerToZero
变量的值为函数stepBackward
,所以可以直接调用。