Groovy imbriquée fermetures avec l'aide de "elle"
Code de l'intérieur, les fermetures peuvent se référer à it
variable.
8.times { println it }
ou
def mywith(Closure closure) {
closure()
}
mywith { println it }
Avec ce comportement à l'esprit que vous ne pouvez pas attendre de code suivant pour imprimer 0011
2.times {
println it
mywith {
println it
}
}
Et au lieu de cela, je dois l'écrire
2.times { i ->
println i
mywith {
println i
}
}
Ma question est: pourquoi les fermetures sans paramètres remplacent it
variable, même si elles n'en ont pas besoin.
Vous devez vous connecter pour publier un commentaire.
Je pense qu'il a quelque chose à voir avec la la Clôture formelle de la définition de Groovy:
Qui signifie que Groovy Fermeture aura toujours au moins un argument, appelé il (si non spécifié autrement) et il sera null si pas donné comme paramètre.
Le deuxième exemple utilise le champ d'application de la enfermant fermeture de la place.
Si vous définissez une fermeture comme ce
Il semble ne pas avoir de paramètres, mais en fait c'est un paramètre implicite nommé
it
. Ceci est confirmé par:qui imprime
Si vous voulez vraiment définir une fermeture qui prend 0 paramètres, utilisez ceci:
Votre exemple pourrait donc être réécrit comme suit:
it
variable qui est imprimé dans lemywith
imbriquée fermeture est une free variable.