Объясните этот Groovy код? - PullRequest
2 голосов
/ 03 марта 2011
def foo(n) {
    return {n += it}
}

Ответы [ 2 ]

17 голосов
/ 03 марта 2011

Код определяет функцию / метод 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) 
0 голосов
/ 03 марта 2011

Я полагаю, что он возвращает двойное значение, которое вы передаете, или конкатенацию одной и той же строки дважды, если вы даете ей строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...