J'ai besoin de stocker une valeur dans une variable dans une méthode, puis je dois utiliser cette valeur de cette variable dans une autre méthode ou fermeture. Comment puis-je partager cette valeur?
128
Dans un script Groovy, la portée peut être différente de celle attendue. C'est parce qu'un script Groovy en lui-même est une classe avec une méthode qui exécutera le code, mais tout cela est fait à l'exécution. Nous pouvons définir une variable à étendre au script en omettant la définition de type ou dans Groovy 1.8, nous pouvons ajouter l'annotation @Field.
import groovy.transform.Field
var1 = 'var1'
@Field String var2 = 'var2'
def var3 = 'var3'
void printVars() {
println var1
println var2
println var3 // This won't work, because not in script scope.
}
class Globals
solution ci-dessous est un moyen de contourner cela.var1 = 'var1'
méthode dans un pipeline Jenkins en utilisant Groovy et cela n'a pas fonctionné. Je devais utiliser@Field var1 = 'var1'
la source
ici la variable iamglobal est une variable globale utilisée par func puis à nouveau disponible pour func2
si vous déclarez une variable avec def, elle sera locale, si vous n'utilisez pas def son global
la source
Comme tous les langages OO, Groovy n'a pas de concept de "global" en lui-même (contrairement, disons, BASIC, Python ou Perl).
Si vous avez plusieurs méthodes qui doivent partager la même variable, utilisez un champ:
la source
Déclarez simplement la variable au niveau de la classe ou du script, puis accédez-y depuis vos méthodes ou fermetures. Sans un exemple, il est difficile d'être plus précis pour votre problème particulier.
Cependant, les variables globales sont généralement considérées comme de mauvaise forme.
Pourquoi ne pas renvoyer la variable d'une fonction, puis la passer à la suivante?
la source
Je pense que vous parlez de variables au niveau de la classe. Comme mentionné ci-dessus, l'utilisation de variables globales de niveau variable / classe n'est pas une bonne pratique.
Si vous voulez vraiment l'utiliser. et si vous êtes sûr qu'il n'y aura pas d'impact ...
Déclarez toute variable en dehors de la méthode. au niveau de la classe sans le type de variable
par exemple:
la source
la source
Vous ne pouvez pas comprendre ce que vous voulez, mais vous avez besoin de quelque chose comme ça? :
bValue
Contient maintenant la valeurb
dont est une variable dans la fermeturea
. Vous pouvez maintenant faire n'importe quoi avecbValue
Faites-moi savoir si j'ai mal compris votre questionla source