Vergleich von Lambdas: Eine umfassende Übersicht
Einführung
Lambdas, auch als anonyme Funktionen bekannt oder Abschlüsse werden in modernen Programmiersprachen wegen ihrer Kürze und Aussagekraft häufig verwendet. Es kann jedoch vorkommen, dass es notwendig wird, zwei Lambdas zu vergleichen, entweder auf funktionale Äquivalenz oder auf Identität.
Spezifikation vs. Implementierungsperspektive
Aus Sicht der Sprachspezifikation , Lambda-Ausdrücke erstellen garantiert eine Instanz einer Klasse, die die Zielfunktionsschnittstelle implementiert. Die Einzigartigkeit oder das Aliasing dieser Instanzen bleibt jedoch unbestimmt, was Flexibilität für Implementierungen bietet.
Überlegungen zur Implementierung
Derzeit behält die Lambda-Ausdrucksimplementierung eine 1:1-Beziehung zwischen bei synthetische Klassen (generiert, um Lambdas zu implementieren) und Capture-Sites im Programm. Zwei an verschiedenen Standorten erfasste Lambdas können, auch wenn sie funktional identisch sind, mithilfe unterschiedlicher Klassen implementiert werden. Für nicht einfangende Lambdas, die an derselben Einfangstelle bewertet werden, impliziert Referenzgleichheit (==) jedoch funktionale Äquivalenz.
Alternative Ansätze
Einschränkungen
Die Herstellung funktionaler Gleichheit für Lambdas ist von Natur aus eine Herausforderung. Zwei Lambdas können funktional identisch sein, aber wenn sie nicht am selben Erfassungsort ausgewertet oder in unterschiedliche funktionale Schnittstellentypen konvertiert werden, kann die Referenzgleichheit nicht garantiert werden.
toString-Überlegungen
Innerhalb der Java Expert Group (EG) gab es Diskussionen über die Bereitstellung einer aussagekräftigeren toString-Implementierung für Lambdas. Es wurde jedoch noch keine endgültige Schlussfolgerung gezogen und es bleibt ein Thema für zukünftige Überlegungen.
Das obige ist der detaillierte Inhalt vonWann verhalten sich zwei Lambdas gleich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!