为什么groovy闭包引用for循环迭代计数器
我想知道为什么下面两个代码段会输出不同的结果。看起来迭代计数器是闭包处理的特殊情况为什么groovy闭包引用for循环迭代计数器,groovy,closures,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 inti=1 def闭包=(1..3)。收集{ 返回{println i
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
inti=1
def闭包=(1..3)。收集{
返回{println i;++i}
}
对于(int j=0;j<3;++j){
闭包+={println j}
}
闭包*.call()
1.
2.
3.
3.
3.
3.
这是一个何时更新变量的问题
在第一个示例中,i
仅在执行闭包时递增,因此即使每个闭包都绑定到相同的i
实例,每个输出都是不同的
在第二个示例中,j
在闭包外递增,因此在运行闭包时,for
循环已完成,j
的值为3