(Swift) 嵌套函数,函数作为 return,参数
(Swift) nested function, function as return, argument
关于下面的代码,我想知道stepForward、stepBackward等嵌套函数在实际通过'moveNearerToZero(currentValue)调用时,如何将currentValue作为参数。
根据函数chooseStepFunction的定义,return类型为(Int) -> Int。那么,是不是因为 Int 周围的括号,嵌套的函数才能够将 currentValue 作为参数?
我无法理解如何在两个嵌套函数中捕获 currentValue 的 -4 值。
func chooseStepFunction(backward: Bool) -> (Int) -> Int {
func stepForward(input: Int) -> Int { return input + 1 }
func stepBackward(input: Int) -> Int { return input - 1 }
return backward ? stepBackward : stepForward
}
var currentValue = -4
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)
while currentValue != 0 {
print("\(currentValue)... ")
currentValue = moveNearerToZero(currentValue)
}
print("zero!")
Swift 中的函数首先是 class 公民。这意味着函数可以像变量一样传递或存储,就像任何其他 swift 类型一样。
第一个 ->
之后的任何内容都是该方法返回的类型。在这种情况下 chooseStepFunction
returns 另一种方法采用一个参数 (Int) 和 returns 一个值 (Int)。第一个 Int 周围的括号表示它是一个输入参数。
考虑到这一点,moveNearerToZero
是接受一个 Int 和 returns 另一个 Int 的函数。要调用该方法,您只需执行 moveNearerToZero(1)
等等。
我强烈建议您阅读 Apple 关于函数的部分,以更好地理解如何使用或传递函数。
https://docs.swift.org/swift-book/LanguageGuide/Functions.html
chooseStepFunction(backward: currentValue > 0) returns "stepForward" 函数。在 "stepForward" 函数中,值递增 1。因此,先打印 -4,然后打印 -3(-4+1),依此类推,直到 currentValue 达到 0,while 循环终止。
关于下面的代码,我想知道stepForward、stepBackward等嵌套函数在实际通过'moveNearerToZero(currentValue)调用时,如何将currentValue作为参数。
根据函数chooseStepFunction的定义,return类型为(Int) -> Int。那么,是不是因为 Int 周围的括号,嵌套的函数才能够将 currentValue 作为参数?
我无法理解如何在两个嵌套函数中捕获 currentValue 的 -4 值。
func chooseStepFunction(backward: Bool) -> (Int) -> Int {
func stepForward(input: Int) -> Int { return input + 1 }
func stepBackward(input: Int) -> Int { return input - 1 }
return backward ? stepBackward : stepForward
}
var currentValue = -4
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)
while currentValue != 0 {
print("\(currentValue)... ")
currentValue = moveNearerToZero(currentValue)
}
print("zero!")
Swift 中的函数首先是 class 公民。这意味着函数可以像变量一样传递或存储,就像任何其他 swift 类型一样。
第一个 ->
之后的任何内容都是该方法返回的类型。在这种情况下 chooseStepFunction
returns 另一种方法采用一个参数 (Int) 和 returns 一个值 (Int)。第一个 Int 周围的括号表示它是一个输入参数。
考虑到这一点,moveNearerToZero
是接受一个 Int 和 returns 另一个 Int 的函数。要调用该方法,您只需执行 moveNearerToZero(1)
等等。
我强烈建议您阅读 Apple 关于函数的部分,以更好地理解如何使用或传递函数。 https://docs.swift.org/swift-book/LanguageGuide/Functions.html
chooseStepFunction(backward: currentValue > 0) returns "stepForward" 函数。在 "stepForward" 函数中,值递增 1。因此,先打印 -4,然后打印 -3(-4+1),依此类推,直到 currentValue 达到 0,while 循环终止。