Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
このテストコードを見てください:
def a = "test" def expando = new Expando() expando.a = a expando.foobar = {a} expando.a = "test1" assert expando.foobar() != a
最後のアサーションが失敗するのはなぜですか? 「a」は、expando.a プロパティではなく、ローカル変数と見なされます。
手伝ってくれてありがとう
間違っているかもしれませんが、 を呼び出すexpando.foobar()と、 に割り当てられたクロージャーの結果が返されfoobarます。この場合はaであるため、 a: の値を返しますtest。
expando.foobar()
foobar
a
test
expando.foobar()変数がスコープ内で定義されていない限り (この場合は定義されている)、クロージャーはデリゲートを検索しないため、プロパティ 'a' は呼び出されません。
編集: を実行するとexpando.foobar = {delegate.a}、期待する結果が返されます。
expando.foobar = {delegate.a}