我想了解封閉,但字面上每封閉的定義,我可以找到使用相同的含糊不清的短語:「關閉」。這是什麼意思「關閉」的東西?
什麼是關閉? 「哦,這是一個函數,關閉了其他功能。」
但無處我能找到的東西「關閉了」的意思的定義。有人能解釋什麼事情是什麼意思讓事情A「關閉」事情B?
我想了解封閉,但字面上每封閉的定義,我可以找到使用相同的含糊不清的短語:「關閉」。這是什麼意思「關閉」的東西?
什麼是關閉? 「哦,這是一個函數,關閉了其他功能。」
但無處我能找到的東西「關閉了」的意思的定義。有人能解釋什麼事情是什麼意思讓事情A「關閉」事情B?
閉包是由一個代碼指針和一個環境指針組成的一對。環境指針包含給定函數的所有自由變量。例如:
fun f(a, b) =
let fun g(c, d) = a + b + c + d
in g end
val g = f(1, 2)
val result = g(3, 4) (*should be 10*)
功能g
包含兩個自由變量:a
和b
。如果您對「自由變量」這個術語不熟悉,則它是一個未在函數範圍內定義的變量。在這種情況下,關閉東西,意味着從函數中刪除任何發生的自由變量。上面的例子爲閉包提供了很好的動力。當函數f
返回時,我們需要能夠記住以後的a
和b
的值。這是編譯的方法,是治療功能g
作爲代碼指針,包含了所有的自由變量,如記錄:
fun g(c, d, env) = env.a + env.b + c + d
fun f(a, b, env) = (g, {a = a, b = b})
val (g, gEnv) = f(1, 2)
val result = g(3, 4, gEnv)
當我們應用功能g
,我們提供調用時所返回的環境功能f
。請注意,現在函數g
不再有任何未在其範圍內定義的變量。我們通常稱一個沒有任何自由變量的術語,如已關閉。如果你還不清楚,馬特強權在閉合轉換的深度解釋一個優秀的http://matt.might.net/articles/closure-conversion/
閉包是可以通過周圍 並在代碼中使用的功能自足塊。 Swift中的閉包類似於C和Objective-C中的 以及其他編程語言中的lambda。
但這是什麼意思?
這意味着封閉捕獲的變量和在其所定義的上下文的常數,被稱爲閉過那些變量和常量。
我希望有幫助!
http://en.wikipedia.org/wiki/Closure_%28computer_programming%29#History_and_etymology - 給你一些開始。關閉「關閉」打開的綁定。 – Blorgbeard
LOL,「*封閉是通過打開的綁定關閉的東西。*」這可能會更不具描述性?!?真?!? **真的嗎?!?!** – smeeb
如果那是我所說或所鏈接的任何內容的直接引用,那麼你會有一個觀點。下面是我鏈接到的內容:「一個lambda表達式,其開放綁定(自由變量)已被詞法環境關閉(或綁定),導致了一個關閉的表達式或閉包」。 – Blorgbeard