[英]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.