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:-)修复了代码,因为没有必要在将来为人们提供次优示例:-)