为什么groovy closure指的是带有引用

时间:2017-07-07 09:17:52

标签: groovy closures

我想知道为什么以下两个片段输出不同的结果。看起来迭代计数器是由闭包处理的特殊情况。

int i = 1
def closures = (1..3).collect {
    return { println i; ++i }
}

for (int j = 0; j < 3; ++j) {
    closures += { println j }
}

closures*.call()

1
2
3
3
3
3

1 个答案:

答案 0 :(得分:0)

这是变量何时更新的问题

在第一个示例中,i仅在执行闭包时递增,因此即使每个闭包绑定到同一个i实例,每个输出也是不同的

在第二个示例中,j在闭包之外递增,因此当您运行它们时,for循环已完成,j的值为{{1 }}