2016-06-14 11 views
2

Wie kann ich einen Funktionsaufruf in einer Schließung in Groovy machen? Derzeit wird diese versuchen, aber es ergibt sich in allen Iterationen die Werte aus dem letzten Array-Element mit:Groovy Funktionsaufruf in einer Schließung

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

Antwort

4

dass ein

common gotcha

ist Das sollte funktionieren:

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

Oder

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

Leider kann ich das nicht testen, weil Jenkins auf den collectEntries einen Skript-Sicherheitsfehler gibt Thod und ich können es nicht auf die weiße Liste setzen, aber ich bezweifle nicht, dass es funktioniert. Der Link war sehr praktisch, danke! –

+0

Eine Version hinzugefügt, die 'inject' verwendet –