1

このテストコードを見てください:

def a = "test"

def expando = new Expando()

expando.a = a

expando.foobar = {a}

expando.a = "test1"

assert expando.foobar() != a

最後のアサーションが失敗するのはなぜですか? 「a」は、expando.a プロパティではなく、ローカル変数と見なされます。

手伝ってくれてありがとう

4

1 に答える 1

3

間違っているかもしれませんが、 を呼び出すexpando.foobar()と、 に割り当てられたクロージャーの結果が返されfoobarます。この場合はaであるため、 a: の値を返しますtest

expando.foobar()変数がスコープ内で定義されていない限り (この場合は定義されている)、クロージャーはデリゲートを検索しないため、プロパティ 'a' は呼び出されません。

編集: を実行するとexpando.foobar = {delegate.a}、期待する結果が返されます。

于 2011-07-17T18:50:57.397 に答える