Ich schrieb den folgenden Code zu lernen Schließung/Methode Überschreiben in groovy. Ich konnte sein Verhalten nicht verstehen.Ich versuche zu verstehen, Laufzeit Schließung/Methode Überschreiben in 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()}
Ich erwartete die beiden closure2
Anrufe das gleiche Ergebnis zu erzeugen, aber offenbar nicht, dass sie tun.
Unten ist das Ergebnis der Ausführung meines Codes.
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]
}
Ah ... ich bin endlich klar jetzt genannt. Ich war verwirrt zwischen einer Methode und einer Eigenschaft (ein Closure-Objekt). Vielen Dank! –