2016-06-14 204 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'的版本 –