Ma compréhension de l'opérateur groovy Bien sûr, si je change la dernière ligne en p> Cela fonctionne bien, mais qu'est-ce qui ne va pas avec ma compréhension du merci,
Don p> p> . & code> est qu'il convertit un appel de méthode à une fermeture. Par conséquent, il semble que le code suivant (qui puisse être exécuté dans le groovy console ) devrait fonctionner:
. & code> opérateur? p>
3 Réponses :
Lors de la conversion d'une méthode en une fermeture en utilisant . & strong> notation que vous laissez désactiver les paramètres. F. & Méthode (6) est identique à celle de l'appelant F.Method (6) qui reviendra 16, donc dans votre exemple, vous passez 16 dans la invocation et non une fermeture. Qui provoque l'exception suivante car la classe entière n'a pas de méthode d'appel: exception projetée: Aucune signature de la méthode: java.lang.integer.call () strong> p> Ci-dessous transmet un pointeur de méthode pour F.Method dans InvokeClosure et ce que vous utiliseriez généralement. &. P> Comme vous l'avez indiqué que les éléments suivants fonctionnent: P > invokeClosure {f.method(6)}
En fait, je pense strictement, je pense que {f.method (6)} code> est une fermeture qui prend un paramètre tandis que
{-> f.method (6)} code> est une fermeture qui ne prend aucun paramètre. Grande réponse cependant, merci!
Utiliser invokeclosure f. & Method.Curry (6) code> à la place. Ceci est une fermeture qui pourrait être appelée sans paramètres p>
L'exemple ci-dessus pourrait également être étendu pour prendre le paramètre en tant qu'argument dans la invoquation. Cela vous donnerait le résultat attendu et la syntaxe.
class Foo { def method(def param) { param + 10 } } def invokeClosure = {Closure closure, def parameter -> return closure.call(parameter) } def f = new Foo() invokeClosure f.&method, 6