次の例は、本 Groovy in Action (2007) のリスト 7.22 からのものです。
def boxer = new Expando()
assert null == boxer.takeThis
boxer.takeThis = 'ouch!'
assert 'ouch!' == boxer.takeThis
boxer.fightBack = {times -> return this.takeThis * times }
assert 'ouch!ouch!ouch!' == boxer.fightBack(3)
コードを script に入れましたhello.groovy
。実行すると、次のエラーが発生しました。
Caught: groovy.lang.MissingPropertyException: No such property: takeThis for class: hello
groovy.lang.MissingPropertyException: No such property: takeThis for class: hello
at hello$_run_closure1.doCall(hello.groovy:5)
at hello.run(hello.groovy:6)
どうやら、this
5行目はboxer
オブジェクトではなくスクリプトを参照しています。fightBack
では、プロパティを Expandoに追加する正しい方法は何boxer
ですか?