Rom*_*man 3 collections groovy closures
假设我有一个闭包:
def increment = {value, step ->
value + step
}
Run Code Online (Sandbox Code Playgroud)
现在我想循环遍历整数集合的每个项目,用5增加它,并将新元素保存到新集合:
def numbers = [1..10]
def biggerNumbers = numbers.collect {
it + 5
}
Run Code Online (Sandbox Code Playgroud)
现在我想通过使用increment闭包来实现相同的结果.我怎样才能做到这一点?
应该是这样的(下面的代码错误):
def biggerNumbers = numbers.collect increment(it, 5) //what's the correct name of 'it'??
Run Code Online (Sandbox Code Playgroud)
Nik*_*kov 10
你的问题的解决方案是在闭包中嵌套你的增量调用:
def biggerNumbers = numbers.collect {increment(it, 5)}
Run Code Online (Sandbox Code Playgroud)
如果你想将预制闭包传递给collect你应该使它兼容collect- 接受一个参数:
def incrementByFive = {it + 5}
def biggerNumbers = numbers.collect incrementByFive
Run Code Online (Sandbox Code Playgroud)
mojojojo有正确的答案,但只是以为我想补充的是,这看起来像一个很好的候选人柯里(特别是使用rcurry)
如果你有:
def increment = {value, step ->
value + step
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下方法调整此函数的右侧参数:
def incrementByFive = increment.rcurry 5
Run Code Online (Sandbox Code Playgroud)
然后,你可以这样做:
def numbers = 1..10
def biggerNumbers = numbers.collect incrementByFive
Run Code Online (Sandbox Code Playgroud)
只是觉得它可能有趣;-)
| 归档时间: |
|
| 查看次数: |
3814 次 |
| 最近记录: |