我想知道为什么下面两个片段输出不同的结果。看起来迭代计数器是由闭包处理的特例。
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发布于 2017-07-08 09:23:05
这是一个何时更新变量的问题
在第一个示例中,i只在执行闭包时递增,因此即使每个闭包绑定到同一个i实例,每个输出也是不同的。
在第二个示例中,j在闭包之外递增,因此在运行它们时,for循环已经完成,j的值为3。
https://stackoverflow.com/questions/44967051
复制相似问题