4 votes

Y a-t-il un moyen d'avoir des objets appelables en Groovy ?

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?

7voto

Ruben Points 4459

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.com

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.

Powered by:

X