我正在学习闭包课程,并指导这是对嵌套函数的理解。我发现以下示例令人困惑。您将嵌套函数分配给变量:
let person = personInTheHouse()
变量的调用如下:
print(person(“playing cricket”)) // prints “The person is playing cricket.”
我们将一个String(“打板球”)传递给该函数。我无法解决的问题是函数没有字符串作为参数。这就是我不理解的。
func personInTheHouse() -> ((String) -> String) {
完整代码:
func personInTheHouse() -> ((String) -> String) {
func doProcess(process: String) -> (String) { // nested function
return “The person is \(process).”
}
return doProcess // or return doProcess(process:)
}
let person = personInTheHouse()
print(person(“playing cricket”)) // prints “The person is playing cricket.”
答案 0 :(得分:0)
你误以为:
将嵌套函数分配给变量:
let person = personInTheHouse()
personInTheHouse
是一个嵌套函数,但personInTheHouse()
是将()
应用于personInTheHouse
的结果,其返回类型为(String) -> String
。
因此,person
的类型是(String) -> String
,一个普通(非嵌套)函数。 参数String
,您可以将字符串“playing cricket”
传递给person
。
在personInTheHouse
内,没有像doProcess
(或doProcess(process:)
这样的参数的引用函数名称将函数本身表示为闭包。但是添加像personInTheHouse()
这样的实际参数表示函数调用的结果。
答案 1 :(得分:0)
personInTheHouse
是不带参数的函数,返回另一个函数。当你写:
let person = personInTheHouse()
person
也是一个功能。它有什么功能?如果您阅读personInTheHouse
的定义,则会看到它返回doProcess
,这是一个带String
并返回String
的函数。所以person == doProcess
- 需要String
并返回String
。
这就是为什么你可以写
print(person("playing cricket"))