### closure閉包(特性/現象) 使lambda函式中可以存取使用外部的變數,並保持引用。 ### capture捕獲(行為) 執行到該lambda函式建立時,會把其中使用到的外部變數, 以值捕獲(capture by value)或引用捕獲(capture by reference)的方式, 保存至該lambda函式的閉包環境中,供該函式執行時存取。 ### 語言差異 不同語言在closure與capture的行為上可能有所不同,如:c++, swift就需要明確指示要捕獲哪些外部變數,c#, javascript, lua, python則是隱含以引用捕獲,而python需要注意指定作用域nonlocal,少數像gdscript比較特別是隱含捕獲但引用類變數(dictionary, array)是引用捕獲,值類型則是值捕獲。 ### 可能的問題 而引用捕獲也有可能造成一些問題例如: 1. 沒有釋放引用計數導致佔用記憶體 2. 強引用循環: 應可被簡單解釋為,兩個變數互相引用,可獨立生存而不受到環境或區段結束或失去其他計數而被回收,導致持續存在的狀況。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up