2016-06-14 206 views
2

如何在Groovy中的闭包中进行函数调用?目前尝试这一点,但它会导致使用从最后一个数组元素的值的所有迭代:Groovy中的函数调用

def branches = [:] 
for (int i = 0; i < data.steps.size(); i++) { 
    branches["${data.steps.get(i).name}"] = { 
     myFunc(data.steps.get(i)) 
    } 
} 
parallel branches 

回答

4

这是一个common gotcha

这应该工作:

def branches = data.steps.collectEntries { step -> 
    [step.name, { myFunc(step) }] 
} 
parallel branches 

或者

def branches = data.steps.inject([:]) { map, step -> 
    map << [(step.name): { myFunc(step) }] 
} 
+0

不幸的是我无法测试,因为Jenkins在collectEntries上给我一个脚本安全错误我不能将它列入白名单,但我不怀疑它是否有效。链接非常方便,谢谢! –

+0

增加了一个使用'inject'的版本 –