如何避免 Lambda 函數會因為共享作用域變數而出現意外行為?

Barbara Streisand
發布: 2024-10-19 17:25:30
原創
166 人瀏覽過

How to Avoid Unexpected Behavior in Lambda Functions Due to Shared Scope Variables?

Lambda 函數及其參數的作用域行為

當建立 lambda 函數時,它會繼承其封閉函數的作用域。然而,當使用迭代器循環產生一系列 lambda 函數時,會出現一個常見的誤解。在這種情況下,lambda 函數共享相同的作用域變量,從而導致意外結果。

考慮以下簡化程式碼:

預期輸出為:

然而,實際輸出是:

發生這種情況是因為lambda 函數在建立時保留了對封閉範圍內的共享變數m 的參考。當執行 lambda 函數時,m 已重新指派給“mi”,從而導致意外的輸出。

要解決此問題,可以使用具有預設值的可選參數。這允許每個lambda 函數捕獲自己的變數值:

透過此修改,每個lambda 函數在建立時都會維護m 值的不同副本,從而產生所需的輸出:

以上是如何避免 Lambda 函數會因為共享作用域變數而出現意外行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!