Ich bin etwas verwirrt, was den Begriff "Schließung" betrifft, der in der Groovy Dokumentation verwendet wird. Laut der Dokumentation scheint ihre Definition einer Schließung eher wie eine anonyme Funktion oder ein Lambda zu sein.
Ich verstehe, dass Sprachen, die erstklassige Funktionen unterstützen, typischerweise die Bildung von Schließungen zulassen. Es gibt jedoch einen Unterschied zwischen den beiden Konzepten.
Zum Beispiel laut der Groovy-Dokumentation:
Eine Schließung in Groovy ist anonym Stück Code, der Argumente annimmt, einen Wert zurückgeben und verweisen und verwenden in seiner Umgebung deklarierte Variablen Umfang.
Ein solcher anonymer Codeblock könnte im Sprachgebrauch der funktionalen Sprache als anonymer Lambda-Ausdruck im allgemeinen oder als Lambda-Ausdruck mit ungebundenen Variablen oder als geschlossener Lambda-Ausdruck bezeichnet werden, wenn er keine Referenzen auf nicht gebundene Variablen enthält früheres Beispiel). Groovy macht keine solche Unterscheidung.
Dann nach der Wikipedia -Seite zu Closures:
Der Begriff Schließung wird oft fälschlicherweise für anonyme Funktion verwendet.
Was vermisse ich?
Wie es im nächsten Abschnitt derselben Seite heißt, mit der Sie in den groovigen Dokumenten verlinkt sind :
Streng genommen kann eine Schließung nicht sein definiert. Sie können einen Block von definieren Code, der auf lokale Variablen verweist oder Felder / Eigenschaften, aber es wird a Schließung nur, wenn Sie "binden" (geben Sie es eine Bedeutung) diesen Block von Code zu Variablen. Die Schließung ist eine Semantik Konzept, wie eine Instanz, die Sie kann nicht definieren, nur erstellen. Streng eine Schließung gesprochen ist nur eine Schließung, wenn Alle freien Variablen sind gebunden. Es sei denn das passiert nur teilweise geschlossen, daher nicht wirklich eine Schließung. Da bietet Groovy keinen Weg dazu Definieren Sie eine geschlossene Lambda-Funktion und a Codeblock ist möglicherweise kein geschlossener Code Lambda-Funktion überhaupt (weil es hat freie Variablen), wir bezeichnen beide als Schließung - auch als syntaktisches Konzept. Wir sprechen darüber syntaktisch Konzept, weil der Code des Definierens und das Erstellen einer Instanz ist dort eins ist kein Unterschied. Wir wissen es sehr gut dass diese Terminologie mehr oder weniger ist falsch, aber es vereinfacht viele Dinge wenn man über Code in einer Sprache spricht das "kennt" den Unterschied nicht.