Réponses:
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'
class Globals {
static String ouch = "I'm global.."
}
println Globals.ouch
def iamnotglobal=100 // This will not be accessible inside the function
iamglobal=200 // this is global and will be even available inside the
def func()
{
log.info "My value is 200. Here you see " + iamglobal
iamglobal=400
//log.info "if you uncomment me you will get error. Since iamnotglobal cant be printed here " + iamnotglobal
}
def func2()
{
log.info "My value was changed inside func to 400 . Here it is = " + iamglobal
}
func()
func2()
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
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:
class Foo {
def a;
def foo() {
a = 1;
}
def bar() {
print a;
}
}
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?
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:
{
method()
{
a=10
print(a)
}
// def a or int a wont work
a=0
}
def sum = 0
// This method stores a value in a global variable.
def add =
{
input1 , input2 ->
sum = input1 + input2;
}
// This method uses stored value.
def multiplySum =
{
input1 ->
return sum*input1;
}
add(1,2);
multiplySum(10);
Vous ne pouvez pas comprendre ce que vous voulez, mais vous avez besoin de quelque chose comme ça? :
def a = { b -> b = 1 }
bValue = a()
println b // prints 1
bValue
Contient maintenant la valeur b
dont est une variable dans la fermeture a
. Vous pouvez maintenant faire n'importe quoi avec bValue
Faites-moi savoir si j'ai mal compris votre question