groovy Expando:为什么它考虑局部变量而不是expando属性?

时间:2011-07-17 17:48:17

标签: groovy expando

查看此测试代码:

def a = "test"

def expando = new Expando()

expando.a = a

expando.foobar = {a}

expando.a = "test1"

assert expando.foobar() != a

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

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

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

expando.foobar()不会调用属性'a',因为闭包不会查找它们的委托,除非在作用域中没有定义变量(在这种情况下它是)。

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