2010-01-06 23 views
12

Si defino un cierre en GroovyInvocación Groovy cierres

def c = {println "foo"} 

puedo invocar utilizando uno

c() 

o

c.call() 

AFAIK, estos dos son idénticos. Sin embargo, recientemente he descubierto una tercera vía

c.doCall() 

¿Hay alguna diferencia entre call() y doCall()

Gracias, Don

Respuesta

11

El método doKall es lo que se invoca cuando se llama c() oc .llamada().

Encontré un ejemplo que afirmaba que se usa para llamar al cierre desde su interior, pero parece funcionar también con call().

El documentation dice que debe proporcionar un método doCall() para especificar los parámetros para llamar al cierre en forma abreviada (sin usar explícitamente call()). Pero no sé exactamente cómo esperan que eso funcione.

Here's an explanation of call vs. doCall.

+2

¿Puede explicar (tal vez dar un ejemplo) de lo que entendemos por "es necesario proporcionar un método doKall() para especificar los parámetros con el fin de llamar la clausura de la forma corta" –