我认为这是一个新手问题,但为什么最后一个断言失败了? 我认为闭包绑定(bind)了它上面的值,因此从闭包中更改它会更改闭包外部的值。
def value = 5
def foo(n){
return {
++n
}
}
def test = foo(value)
assert test() == 6
assert test() == 7
assert value == 7
感谢您的帮助。
最佳答案
这确实看起来很奇怪,但我认为这是正确的。所有对象事件整数均通过引用传递。调用 foo(value) 将值传递给函数。变量“n”是对与“值”引用相同的对象的引用。本质上你有两个指向同一个对象的指针。当您增加“n”时,您只是增加了该变量。
由于 Integer 类是不可变的++n 实际上正在做类似的事情:
n = n + 1
这是将递增的值分配给变量 n。顶部声明的变量“value”仍然指向原始对象5。
关于Groovy - 闭包和绑定(bind),为什么这段代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3686059/