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