А пока давайте отложим замыкания, рассмотрим следующий код:
def f1() {
testProperty : 5
}
def f2() {
testProperty : "Hello"
}
println f1()
println f1().getClass()
println f2()
println f2().getClass()
Он компилируется (для этого синтаксис действителен) и печатает:
5
class java.lang.Integer
Hello
class java.lang.String
Итак, что вы видите здесь просто помеченный оператор (groovy поддерживает метки см. здесь )
И нижняя строка кода f1 (как и f2):
def f1() {
return 5 // and return is optional, so we don't have to write it
}
С замыканиями то же самое с этой точки зрения:
def method(Closure c) {
def result = c.call()
println result
println result.getClass()
}
method {
test : "hello"
}
Это печатает
hello
class java.lang.String
, как и ожидалось