查看此测试代码:
def a = "test"
def expando = new Expando()
expando.a = a
expando.foobar = {a}
expando.a = "test1"
assert expando.foobar() != a
为什么最后一个断言失败了?它将“a”视为局部变量而不是expando.a属性。
感谢您的帮助
答案 0 :(得分:3)
也许我错了,但是当你调用expando.foobar()
时,它会返回分配给foobar
的闭包的结果。在这种情况下,它是a
,因此它返回a:test
的值。
expando.foobar()
不会调用属性'a',因为闭包不会查找它们的委托,除非在作用域中没有定义变量(在这种情况下它是)。
编辑:
如果你要做expando.foobar = {delegate.a}
,那将返回你期望的结果。