ラムダの比較: 包括的な概要
はじめに
ラムダ (匿名関数とも呼ばれます)クロージャは、その簡潔さと表現力の高さから、現代のプログラミング言語で広く使用されています。ただし、機能の等価性または同一性のために 2 つのラムダを比較する必要があるシナリオが発生する可能性があります。
仕様と実装の観点
言語仕様の観点から, ラムダ式は、ターゲット関数インターフェイスを実装するクラスのインスタンスを作成することが保証されています。ただし、これらのインスタンスの一意性やエイリアスは未指定のままであり、実装に柔軟性が提供されます。
実装に関する考慮事項
現在、ラムダ式の実装では、次のインスタンス間の 1:1 の関係が維持されます。合成クラス (ラムダを実装するために生成) とプログラム内のキャプチャ サイト。異なるサイトでキャプチャされた 2 つのラムダは、機能的に同一であっても、異なるクラスを使用して実装できます。ただし、同じキャプチャ サイトで評価された非キャプチャ ラムダの場合、参照の等価性 (==) は機能の等価性を意味します。
代替アプローチ
制限事項
ラムダの機能的等価性を確立することは本質的に困難です。 2 つのラムダは機能的に同一である可能性がありますが、同じキャプチャ サイトで評価されない場合、または異なる関数インターフェイス型に変換されない場合、参照の同等性は保証されません。
toString に関する考慮事項
Java Expert Group (EG) 内では、ラムダに対するより記述的な toString 実装の提供について議論がありました。しかし、最終的な結論には達しておらず、今後の検討課題となっている。
以上が2 つのラムダが同じ動作をするのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。