Il est un modèle de commande à écrire du code de pipeline Jenkins comme ceci:Pourquoi le fichier jenkins utilise-t-il une fermeture de cette manière?
def call(body) {
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
}
Je ne sais pas comment mot cela simplement, mais cette fermeture obtenir implicitement importés et peut être appelé par le nom de fichier du fichier .groovy
il vit dans
Je l'appelle comme:.
MyClosure { myarg = 'sdfsdf' }
Je pas tout à fait sûr de ce que cela fait. Il fait call(body)
, puis attribue body
en tant que délégué. ce qui signifie que la fermeture je le passe est le délégué, mais n'est-ce pas seulement le propriétaire? Wah? moi confus.
Le corps serait le délégué? Si c'était le cas, n'aurais-je aucun moyen d'accéder à la myarg qui est passée? – red888
Droite. 'body' est une variable qui pointe vers une fonction anonyme. Si vous n'avez pas modifié le délégué, alors myarg sera défini sur 'sdfsdf' dans la portée de cette fonction et dès que cette fonction sera terminée, cette valeur disparaîtra. Mais si vous déléguez à l'objet carte, il définit la propriété sur l'objet, que vous pouvez maintenant atteindre. –
En fait, le corps ne désigne pas une fonction. C'est un exemple de fermeture. – Opal