循環中的Lambda
在提供的程式碼中,目的是建立一個命令函數字典,其中每個值都是一個lambda表達式使用特定目錄名稱呼叫self.root.change_directory 。但是,程式碼錯誤地導致所有命令函數執行相同的目錄變更。
出現問題的原因是 lambda 表達式引用單一變數 d,該變數對於循環的每次迭代都是相同的。因此,所有 lambda 表達式最終都指向 d 的最後一個值。
要修正此問題,需要將 d 的唯一值綁定到每個 lambda 表達式。這可以透過使用 lambda 參數的預設值來實現,如下所示:
在這種情況下,d=d 為每次迭代創建 d 到 d 的當前值的新綁定。循環。因此,每個 lambda 表達式都有自己對 d 值的唯一引用。
或者,可以使用閉包來實現相同的效果:
此閉包創建一個新的每個lambda 表達式的環境,其中d 綁定到d 的當前值。因此,每個 lambda 表達式都可以存取其自己唯一的 d 值。
以上是為什麼迴圈中的 Lambda 函數都引用相同的變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!