返回一个函数vs返回一个闭包

Dan*_*kin 3 closures function swift

在Swift中,据我所知,闭包保留了他们的环境,而普通的功能却没有.

考虑f(返回一个函数)和h(返回一个闭包).无论f()()h()()回报3.为什么不f()()导致运行时错误?

func f() -> () -> Int { 
    let a = 3
    func g() -> Int { 
        return a
    } 
    return g 
} 

func h() -> () -> Int {
    let a = 3
    return { () in a }
}
Run Code Online (Sandbox Code Playgroud)

Dán*_*agy 6

你所写的并不完全正确,因为根据文件:

全局函数是具有名称但不捕获任何值的闭包.

嵌套函数是具有名称的闭包,可以从其封闭函数中捕获值.

Closure表达式是一种未命名的闭包,用轻量级语法编写,可以从周围的上下文中捕获值.

所以g()会捕获值.

  • 实际上你可以只用{a}返回它,如果这是你的意思. (2认同)