Groovy Konzept der Schließung

8

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?

    
Steve 16.03.2011, 14:15
quelle

1 Antwort

11

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.

    
tim_yates 16.03.2011, 14:26
quelle

Tags und Links