Groovy:结合循环、Map和索引

dphi5xsq  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(82)

我试图执行的代码创建n(这里10)不同命名的文件夹,并在其中执行一些功能。他们应该与Jenkins结合使用,并并行执行。
问题是,下面的代码只生成“10”作为输出,而不是我所期望的从0到9的数字:

ps = [:]
for (int i = 0; i < 10; ++i) {
    ps["${i}"] = {
        println(i)
    }
}
for (int i = 0; i < 10; i++) {
    ps["${i}"]()
}

字符串
如何修改代码来打印map的索引?我想我不能把一些东西作为参数传递,因为在Jenkins中,map是通过调用

parallel ps

bzzcjhmw

bzzcjhmw1#

for-loop中的闭包捕获的是变量i,而不是它的值。你需要在每次迭代中创建一个新的var来捕获。

for (int i = 0; i < 10; ++i) {
    def v = i    
    ps[i.toString()] = {
        println(v)
    }
}

字符串
随机附带说明:使用GString作为Map键是不好的(它们不是不可变的)。
如果你“groovy-fy”这段代码,它会变得更短,你不必处理这个问题。

def ps = (0..9).collectEntries { i ->
    [i.toString(), { -> println(i) }]
}
ps.values()*.call()

相关问题