Je dois stocker une valeur dans une variable dans une méthode, puis utiliser cette valeur à partir de cette variable dans une autre méthode ou une autre clôture. Comment puis-je partager cette valeur?
Dans un script Groovy, la portée peut être différente de celle attendue. En effet, 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 à inclure dans le script en omettant la définition du 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 {
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()
here iamglobal variable est une variable globale utilisée par func et à nouveau disponible pour func2
si vous déclarez une variable avec def ce sera local, si vous n'utilisez pas def sa globale
Comme toutes les langues OO, Groovy n’a pas de notion de "global" en soi (contrairement à, par exemple, 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 de la portée du script, puis accédez-y de l'intérieur de vos méthodes ou de vos fermetures. Sans 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 une mauvaise forme.
Pourquoi ne pas renvoyer la variable d'une fonction, puis la passer à la suivante?
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);
Je pense que vous parlez de variables de niveau de classe. Comme mentionné ci-dessus, l'utilisation de variables globales/de niveau 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
}
Impossible de 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
Maintenant, bValue
contient la valeur de b
qui est une variable dans la fermeture a
. Maintenant, vous pouvez faire n'importe quoi avec bValue
Faites-moi savoir si j'ai mal compris votre question