Collections 如何从groovy集合的collect()方法调用具有多个参数的闭包?

Collections 如何从groovy集合的collect()方法调用具有多个参数的闭包?,collections,groovy,closures,Collections,Groovy,Closures,假设我有一个结尾: def increment = {value, step -> value + step } def biggerNumbers = numbers.collect {increment(it, 5)} 现在我想循环遍历integers集合中的每一项,将其递增5,并将新元素保存到新集合中: def numbers = [1..10] def biggerNumbers = numbers.collect { it + 5 } 现在我想通过使用

假设我有一个结尾:

def increment = {value, step ->
   value + step 
}
def biggerNumbers = numbers.collect {increment(it, 5)}
现在我想循环遍历integers集合中的每一项,将其递增5,并将新元素保存到新集合中:

def numbers = [1..10]
def biggerNumbers = numbers.collect {
      it + 5
} 
现在我想通过使用
increment
closure来获得相同的结果。我该怎么做

应该是这样的(下面的错误代码):


问题的解决方案是将增量调用嵌套在闭包中:

def increment = {value, step ->
   value + step 
}
def biggerNumbers = numbers.collect {increment(it, 5)}
如果要将预制闭包传递给
collect
,则应使其与
collect
兼容-接受单个参数,即:

def incrementByFive = {it + 5}
def biggerNumbers = numbers.collect incrementByFive

Mojojo的答案是正确的,但我想补充一点,这看起来是一个很好的候选人(特别是)

如果您有:

def increment = {value, step ->
   value + step 
}
然后,您可以使用以下命令设置此函数的右侧参数:

def incrementByFive = increment.rcurry 5
然后,你可以做:

def numbers = 1..10
def biggerNumbers = numbers.collect incrementByFive

只是觉得可能会有兴趣;-)

主要问题是
[1..10]
创建了一个您试图增加的
列表。您应该直接在内部网上收集
(注意缺少括号):

或搭配咖喱:

def sum = { a, b -> a + b }
(1..10).collect(sum.curry(5))

有趣的建议,但您在
numbers.collect{incrementByFive it}
中犯了一个小错误,在
numbers.collect incrementByFive
足够时实例化了一个冗余闭包。类似的事情会导致开销,尽管Groovy与性能无关。@Mojojo good catch Thank:-)修复了代码,因为没有必要在将来为人们提供次优示例:-)