【问题标题】:Why groovy closure refers to for loop iteration counter with reference为什么 groovy 闭包是指带有参考的 for 循环迭代计数器
【发布时间】:2017-07-07 09:17:52
【问题描述】:

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

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

【问题讨论】:

    标签: groovy closures


    【解决方案1】:

    这是变量何时更新的问题

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

    在第二个例子中,j 在闭包之外递增,所以当你运行它们时,for 循环已经结束,j 的值是3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 2013-12-17
      • 2018-07-05
      • 2017-10-13
      • 1970-01-01
      • 2023-01-27
      • 2016-06-20
      相关资源
      最近更新 更多