Function 对Swift嵌套函数如何工作感到困惑
例如,以以下代码为例:Function 对Swift嵌套函数如何工作感到困惑,function,oop,swift,Function,Oop,Swift,例如,以以下代码为例: func jediTrainer () -> ((String, Int) -> String) { func train(name: String, times: Int) -> (String) { return "\(name) has been trained in the Force \(times) times" } return train } let train = jediTrainer() train("Obi W
func jediTrainer () -> ((String, Int) -> String) {
func train(name: String, times: Int) -> (String) {
return "\(name) has been trained in the Force \(times) times"
}
return train
}
let train = jediTrainer()
train("Obi Wan", 3)
我完全搞不清楚这个函数中发生了什么。jediTrainer不接受任何参数,并返回一个名为train的函数。当我们说train=train时,我们现在是否将函数train存储到名为train的变量中,因为它返回了现在存储在变量中的函数?你能把这里发生的事情分解成几个步骤吗?非常感谢你 在Swift函数中,函数是第一类对象,这意味着函数可以被变量引用、作为参数传递以及从其他函数返回 在您的例子中,jediTrainer返回一个本身是嵌套函数的函数。所以,让训练是指训练器中的训练功能。现在可以使用train变量调用train函数
有关这方面的更多信息,请参阅函数类型和相关主题。您还可以在其他函数体中定义函数。这些函数称为嵌套函数。 默认情况下,嵌套函数对外隐藏。它仍然可以被其封闭函数调用和使用。封闭函数也可以返回其中一个嵌套函数,从而允许嵌套函数在另一个作用域中使用
func aFunc (flag:Book)->(Int)->Int
{
func plus ( input:Int )->Int
{
return input + 1
}
func minus ( input:Int )->Int
{
return input - 1
}
if (flag)
{
return plus
}
else
{
return minus
}
}
让您感到困惑的是,您给了新函数相同的名称。jediTrainer不接受任何参数,但它返回一个接受两个参数的函数。您已经创建了一个名为train的新函数,它的行为与它应该的完全一样。谢谢您的回复。那么,变量序列存储的是函数序列,你可以调用它。变量可以是任何东西,包括一个函数