这是由于groovy闭包以及它们所包含的代码得到计算时造成的。
http://blog.freeside.co/2013/03/29/groovy-gotcha-for-loops-and-closure-scope/
当闭包运行时,绑定到变量i的值是它在循环的最终迭代上的值,而不是创建闭包的迭代上的值。闭包的作用域引用了i,在执行任何闭包时,i是5。
循环体的局部变量的行为与此不同,显然是因为每个闭包范围都包含对不同变量的引用
这就是为什么你的舞台名称是可以的,但你的价值不是。
解决方案是什么?我们应该一直使用。每个而不是一个for循环?嗯,我有点喜欢循环,在许多情况下,可能会有内存利用率的差异(不要认为这意味着循环“更好”或“更高效”)。
如果您只需在
封闭体一切正常
def fns = []
for (i in (1..5)) {
def myi = i
def isq = i * i
fns << {->
println "$myi squared is $isq"
}
}
fns.each { it() }
所以这应该是可行的:
script {
shouter = [:]
for(i in my_list) {
def val = i
shouter["${i}"] = {
echo "standupandshout.sh ${val}"
}
}
parallel shouter
}