// closures.groovy Closure zaehlerMitStartwert(startwert) { return { startwert++ } } def next1 = zaehlerMitStartwert(10) def next2 = zaehlerMitStartwert(20) println next1() // 10 println next2() // 20 println next2() // 21 println next1() // 11
Das
return
in der Funktion zaehlerMitStartwert
gibt die Closure – den darauffolgenden Block mit geschweiften Klammern und der Zähl-Anweisung – zurück. Im Block selbst ist kein return
notwendig, weil hier für den Compiler klar ist, dass die letzte (und hier einzige) Anweisung im Block das Ergebnis der Block-Funktion ist. Man sieht sehr schön, dass Groovy-Closures problemlos freie Variablen außerhalb des Closure-Blocks binden - so, wie das auch bei Scala der Fall ist (aber anders als bei Java, wo normalerweise nur final-Werte und nur mit Tricks Variablen gebunden werden können).
Wer das Groovy-Skript ausprobieren möchte, kann es einfach in die Groovy-Web-Console kopieren und dort ausführen.