簡體   English   中英

返回一個函數vs返回一個閉包

[英]Returning a function vs returning a closure

在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 }
}

你所寫的並不完全正確,因為根據文件

全局函數是具有名稱但不捕獲任何值的閉包。

嵌套函數是具有名稱的閉包,可以從其封閉函數中捕獲值。

Closure表達式是一種未命名的閉包,用輕量級語法編寫,可以從周圍的上下文中捕獲值。

所以g()會捕獲值。

g這樣的內聯函數確實保留了上下文。 實際上,函數被命名為閉包,或者閉包是未命名的函數(無論您喜歡哪種定義)。

如文檔中所述:

函數中引入的全局函數和嵌套函數實際上是閉包的特例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM