Код определяет функцию / метод foo
, который возвращает замыкание.Для понимания этого кода вы можете рассматривать замыкание как метод, который не имеет имени и не привязан ни к какому объекту.
Замыкание можно вызвать, передав ему один аргумент.Значение, возвращаемое замыканием, будет n += it
, где it
- это имя по умолчанию, используемое для ссылки на аргумент замыкания.Если вы хотите, чтобы аргумент замыкания имел другое имя, например, closureParam
, вам нужно было бы определить его экспликацию:
def foo(n) {
return {closureParam -> n += closureParam}
}
->
отделяет список параметров замыкания от тела замыкания.Если список параметров не определен, по умолчанию используется один параметр с именем it
.Может быть, пример вызова закрытия поможет:
Closure closure = foo(2)
def closureReturnVal = closure.call(4)
assert closureReturnVal == 6 // because 4 + 2 == 6
// you can omit .call when calling a closure, so the following also works
closure = foo(3)
assert 8 == closure(5)