首頁  >  文章  >  後端開發  >  如何捕捉循環內 lambda 閉包中的局部變數?

如何捕捉循環內 lambda 閉包中的局部變數?

DDD
DDD原創
2024-11-10 12:52:03231瀏覽

How do you capture local variables in lambda closures within loops?

循環中的Lambda 閉包和變數作用域

在循環中定義lambda 時,了解變數作用域的工作原理非常重要。在提供的程式碼片段中,循環內創建的每個 lambda 引用相同的變數 obj,該變數在每次迭代時都會修改。

預設範圍解析

預設情況下, lambda 將從封閉範圍捕獲變數。在給定的程式碼中,封閉範圍是循環區塊。因此,每個 lambda 有效地捕捉 obj 的最後一個值。從不同範圍呼叫 lambda 時,此行為可能會導致錯誤結果,因為它們可能沒有預期值。

捕獲局部變數

要解決此問題,您需要強制 lambda 捕獲 obj 的當前值。這可以透過在 lambda 中引入一個在創建時綁定到 obj 的新局部變數來實現。以下程式碼片段示範了這種方法:

lambdas_list = []
for obj in obj_list:
    lambdas_list.append(lambda obj=obj: obj.some_var)

透過明確將 obj 作為參數傳遞給 lambda,我們為每個 lambda 建立一個新的局部變數。這確保每個 lambda 從循環迭代中捕獲 obj 的本地值。因此,當您從另一個範圍呼叫 lambda 時,它們將存取正確的值。

以上是如何捕捉循環內 lambda 閉包中的局部變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn