Folgt Groovy dem Korrespondenzprinzip von Tennent?

15

Hier ist eine interessante Diskussion über das Korrespondenzprinzip von Tennent und eine kurze Beschreibung von Neal Gafter :

Das Prinzip schreibt vor, dass ein Ausdruck oder eine Anweisung, wenn sie in einen Verschluss eingeschlossen und dann sofort aufgerufen werden, dieselbe Bedeutung haben muss wie vor dem Einschließen in einen Verschluss. Jede Änderung der Semantik beim Einschließen von Code in einen Closure ist wahrscheinlich ein Fehler in der Sprache.

Folgt die Groovy-Sprache diesem Prinzip?

Armand
quelle

Antworten:

4

Nicht ganz, aber fast. Auf alle Variablen, auf die im äußeren Gültigkeitsbereich zugegriffen werden kann, kann im Closure zugegriffen werden, einschließlich 'this' und Klassendatenelementen. Eine returnAnweisung wird jedoch vom Abschluss zurückgegeben, nicht von der einschließenden Funktion. Ich bin mir nicht mal sicher, ob dies eine Verletzung von TCP ist. Ich kenne keine Sprache returnim C-Stil, in der in einem Closure vom einschließenden Gültigkeitsbereich zurückgekehrt wird. Ich hatte keine Überraschungen mit Groovy Verschlüssen.

Kevin Cline
quelle
Wäre -1, wenn ich genügend Repräsentanten hätte, siehe weiter im Link von OP: programmers.stackexchange.com/questions/116395/…
sq33G