groovy Expando: почему он рассматривает локальную переменную, а не свойства expando? - PullRequest
1 голос
/ 17 июля 2011

глядя на этот код теста:

def a = "test"

def expando = new Expando()

expando.a = a

expando.foobar = {a}

expando.a = "test1"

assert expando.foobar() != a

почему последнее утверждение провалилось? он рассматривает «a» как локальную переменную, а не как свойства expando.a.

Спасибо за помощь

1 Ответ

3 голосов
/ 17 июля 2011

Возможно, я ошибаюсь, но когда вы вызываете expando.foobar(), он возвращает результат замыкания, который был присвоен foobar. В этом случае это a, поэтому он возвращает значение: test.

expando.foobar() не вызывает свойство 'a', поскольку замыкания не ищут своего делегата, если только переменная не определена в области видимости (а в нашем случае это так).

Edit: Если бы вы сделали expando.foobar = {delegate.a}, это вернуло бы ожидаемые вами результаты.

...