Si par exemple j'ai une classe nommée A. Est-il possible de rendre un objet appelable, comme le fait Python? Par exemple :
def myObject = new A()
myObject()
et cela appellerait une méthode de l'objet. Est-ce possible?
Si par exemple j'ai une classe nommée A. Est-il possible de rendre un objet appelable, comme le fait Python? Par exemple :
def myObject = new A()
myObject()
et cela appellerait une méthode de l'objet. Est-ce possible?
En Groovy, seules les fermetures sont appelables par défaut. Par exemple, les classes ne sont pas appelables dès le départ. Si nécessaire, vous pouvez ajouter dynamiquement une méthode d'appel à l'ExpandoMetaClass d'un type pour rendre toutes les instances de ce type appelables.
Conseil : Vous pouvez essayer tous les exemples de code en utilisant le GroovyConsole
Les fermetures sont appelables par défaut en Groovy :
// Une fermeture
def doSomething = { println 'faire quelque chose' }
doSomething()
// Une fermeture avec des arguments
def sum = {x, y -> x + y}
sum(5,3)
sum.call(5,3)
// Currying
def sum5 = sum.curry(5)
sum5(3)
Pour rendre toutes les instances d'un type spécifique appelables, vous pouvez ajouter dynamiquement une méthode d'appel à sa méta-classe :
MyObject.metaClass.call = { println 'J'ai été appelé' }
def myObject = new MyObject()
myObject()
Si vous préférez rendre seulement une instance spécifique appelable, vous pouvez ajouter dynamiquement une méthode d'appel à sa méta-classe :
def myObject = new MyObject()
myObject.metaClass.call = { println 'Appelé' }
myObject()
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.