ループ内のラムダ クロージャでローカル変数をどのようにキャプチャしますか?

DDD
リリース: 2024-11-10 12:52:03
オリジナル
257 人が閲覧しました

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

ループ内のラムダ クロージャと変数スコープ

ループ内でラムダを定義する場合、変数スコープがどのように機能するかを理解することが重要です。提供されているコード スニペットでは、ループ内で作成された各ラムダは同じ変数 obj を参照し、この変数は反復ごとに変更されます。

デフォルトのスコープ解像度

デフォルトでは、 lambda は、囲んでいるスコープから変数をキャプチャします。指定されたコードでは、それを囲むスコープはループ ブロックです。したがって、各ラムダは obj の最後の値を効果的にキャプチャします。この動作により、別のスコープからラムダを呼び出すと、予期した値が得られない可能性があるため、誤った結果が生じる可能性があります。

ローカル変数をキャプチャ

この問題を解決するには、ラムダに obj の現在の値を強制的に取得させる必要があります。これは、作成時に obj にバインドされる新しいローカル変数をラムダに導入することで実現できます。次のコード スニペットは、このアプローチを示しています。

lambdas_list = []
for obj in obj_list:
    lambdas_list.append(lambda obj=obj: obj.some_var)
ログイン後にコピー

ラムダに引数として obj を明示的に渡すことにより、ラムダごとに新しいローカル変数を作成します。これにより、各ラムダがループ反復から obj のローカル値を確実にキャプチャするようになります。その結果、別のスコープからラムダを呼び出すと、ラムダは正しい値にアクセスします。

以上がループ内のラムダ クロージャでローカル変数をどのようにキャプチャしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート