J'ai écrit le code suivant pour apprendre l'écrasement de la fermeture/méthode dans groovy. Je ne pouvais pas comprendre son comportement.Essayer de comprendre la fermeture de l'exécution/l'écrasement des méthodes dans 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()}
Je me attendais les deux appels closure2
pour générer le même résultat, mais apparemment ils ne sont pas.
Voici le résultat de l'exécution de mon code.
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 ... Je suis enfin clair maintenant. J'étais confus entre une méthode et une propriété (un objet Closure). Je vous remercie! –