我想知道为什么以下两个片段输出不同的结果。看起来迭代计数器是由闭包处理的特殊情况。
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
答案 0 :(得分:0)
这是变量何时更新的问题
在第一个示例中,i
仅在执行闭包时递增,因此即使每个闭包绑定到同一个i
实例,每个输出也是不同的
在第二个示例中,j
在闭包之外递增,因此当您运行它们时,for
循环已完成,j
的值为{{1 }}