0
groovyでクロージャ/メソッドの上書きを学習するために次のコードを書いています。私はその行動を理解できませんでした。Groovyでランタイムクロージャ/メソッドの上書きを理解しようとしています
class AClass {
def closure1 = { -> println "hello from closure1 - ${this.toString()}" }
def closure2 = { c1 ->
print "closure2 { \n "
c1()
println "}"
}
}
def obj = new AClass()
print "1: "
obj.closure1()
//over write closure1
obj.metaClass.closure1 = { -> println "hello from *** overridden closure1 *** - ${this.toString()}".toUpperCase()}
print "\n2: "
obj.closure1() //To confirm closure1 was indeed overwritten
//call closure2
print "\n3: "
obj.closure2 (obj.closure1)
print "\n4: "
obj.closure2 {obj.closure1()}
私は同じ結果を生成するために2つのclosure2
の呼び出しを期待していたが、どうやらそうではありません。
以下は私のコードを実行した結果です。あなたがここに二つの異なるものを持っている
1: hello from closure1 - [email protected]
2: HELLO FROM *** OVERRIDDEN CLOSURE1 *** - [email protected]
3: closure2 {
hello from closure1 - [email protected]
}
4: closure2 {
HELLO FROM *** OVERRIDDEN CLOSURE1 *** - [email protected]
}
ああと呼ばれてきた...私は今ようやく明らかです。私はメソッドとプロパティ(Closureオブジェクト)の間で混乱していました。ありがとうございました! –