解释这个Groovy代码?

时间:2011-03-03 17:27:36

标签: groovy

def foo(n) {
    return {n += it}
}

2 个答案:

答案 0 :(得分:17)

代码定义了一个返回闭包的函数/方法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) 

答案 1 :(得分:-2)

我相信它会返回你传入的值的两倍,或者如果给它一个字符串,则返回两次相同字符串的连接。