2010-01-06 6 views
12

Si je définis une fermeture GroovyInvoquer Fermetures Groovy

def c = {println "foo"} 

je peux l'appeler en utilisant soit

c() 

ou

c.call() 

AFAIK, ces deux sont identiques. Cependant, j'ai récemment découvert une troisième voie

c.doCall() 

Existe-t-il des différences entre call() et doCall()

Merci, Don

Répondre

11

La méthode doCall est ce qui est invoquée lorsque vous appelez c() ou c .appel().

J'ai trouvé un exemple qui prétend qu'il est utilisé pour appeler la fermeture depuis l'intérieur de lui-même, mais cela semble fonctionner avec call() aussi.

Le documentation indique que vous devez fournir une méthode doCall() pour spécifier les paramètres afin d'appeler la fermeture dans le formulaire court (sans utiliser explicitement call()). Mais je ne sais pas exactement comment ils s'attendent à ce que cela fonctionne.

Here's an explanation of call vs. doCall.

+2

Pouvez-vous expliquer (peut-être donner un exemple) de ce que vous entendez par « vous devez fournir une méthode doCall() pour spécifier les paramètres afin d'appeler la fermeture sous la forme courte » –