这是我的代码:
def myclosey = {items ->
items + 1}
myclosey(1..3);
我希望将1添加到intrange中的每个元素。相反,1只是添加到intrange的末尾, 所以输出是
[1,2,3,1]
为什么?
答案 0 :(得分:4)
IntRange是一个列表。因此,加号运算符会将一个元素附加到列表中。封闭是在范围本身上调用的,而不是范围中的每个元素。
如果您想为所有元素添加一个,可以(1..3).collect { it + 1 }
,或使用@dmahpatro建议的语法。
答案 1 :(得分:3)
因为你要在一个范围内传递给闭包,所以你必须这样做:
def myclosey = {items ->
items*.plus(1) //Spread on the range
}
assert myclosey(1..3) == [2, 3, 4]