1

看这个测试代码:

def a = "test"

def expando = new Expando()

expando.a = a

expando.foobar = {a}

expando.a = "test1"

assert expando.foobar() != a

为什么最后一个断言失败?它认为“a”是局部变量,而不是expando.a 属性。

感谢帮助

4

1 回答 1

3

也许我弄错了,但是当您调用 时expando.foobar(),它会返回分配给 的闭包的结果foobar。在这种情况下,它是a,因此它返回 a: 的值test

expando.foobar()不调用属性“a”,因为闭包不会查找它们的委托,除非变量未在范围内定义(在本例中是)。

编辑:如果你这样做expando.foobar = {delegate.a},那将返回你期望的结果。

于 2011-07-17T18:50:57.397 回答