4
私はGroovy MetaClassで何か変わった動作をしたことに気付きました。誰かが私にここで何が起こっているのかを知らせることができるのだろうかと思います。groovy invokeMethodメタクラスにメソッドを追加する必要がありますif文?
これは正常に動作します:
ここ@Override
Object invokeMethod(String name, Object args) {
println("Should only see this once")
def impl = { Object theArgs -> println("Firing WeirdAction") }
getMetaClass()."$name" = impl
return impl(args)
}
は私のクラスのインスタンスだと呼んで、クラスは上記以外の空である。しかし
@Override
Object invokeMethod(String name, Object args) {
if(true) {
println("Should only see this once")
def impl = { Object theArgs -> println("Firing WeirdAction") }
getMetaClass()."$name" = impl
return impl(args)
}
}
私は離陸場合、それはMissingPropertyExceptionをスローif文メソッド定義。
IfTester sut = new IfTester()
sut.WeirdAction()
誰かが私がここで誤解していることを知っていますか?
例を実行して、クラス呼び出しとインスタンス呼び出しの間に異なるリターンがあることに気がついたら、もう一度グーグルで検索し、同様のスレッドを見つけました。https://stackoverflow.com/questions/34449587/groovy-this-metaclass-versus-instance-メタクラス。スコープがコールをインスタンスからクラスに変更しているのは私にとっては奇妙ですが、この時点では完全には得られないかもしれません。 – gt124