Ich muss einen Wert in einer Variablen in einer Methode speichern und dann diesen Wert aus dieser Variablen in einer anderen Methode oder einem anderen Abschluss verwenden. Wie kann ich diesen Wert teilen?
128
In einem Groovy-Skript kann das Scoping anders sein als erwartet. Das liegt daran, dass ein Groovy-Skript an sich eine Klasse mit einer Methode ist, mit der der Code ausgeführt wird, die jedoch alle zur Laufzeit ausgeführt wird. Wir können eine Variable definieren, die dem Skript zugeordnet werden soll, indem wir entweder die Typdefinition weglassen oder in Groovy 1.8 die Annotation @Field hinzufügen.
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
Lösung ist ein Weg, um das zu umgehen.var1 = 'var1'
Methode in einer Jenkins-Pipeline mit Groovy ausprobiert und sie hat nicht funktioniert. Ich musste@Field var1 = 'var1'
quelle
hier iamglobal Variable ist eine globale Variable durch verwendet Func und dann wieder zur Verfügung zu func2
Wenn Sie eine Variable mit def deklarieren, ist sie lokal, wenn Sie def nicht global verwenden
quelle
Wie alle OO-Sprachen hat Groovy kein Konzept von "global" für sich (im Gegensatz zu beispielsweise BASIC, Python oder Perl).
Wenn Sie mehrere Methoden haben, die dieselbe Variable gemeinsam nutzen müssen, verwenden Sie ein Feld:
quelle
Deklarieren Sie die Variable einfach im Klassen- oder Skriptbereich und greifen Sie dann über Ihre Methoden oder Abschlüsse darauf zu. Ohne ein Beispiel ist es jedoch schwierig, spezifischer auf Ihr spezielles Problem einzugehen.
Globale Variablen werden jedoch im Allgemeinen als schlechte Form angesehen.
Warum nicht die Variable von einer Funktion zurückgeben und dann an die nächste übergeben?
quelle
Ich denke, Sie sprechen über Variablen auf Klassenebene. Wie oben erwähnt, ist die Verwendung von Variablen auf globaler Variablen- / Klassenebene keine gute Praxis.
Wenn du es wirklich benutzen willst. und wenn Sie sicher sind, dass es keine Auswirkungen geben wird ...
Deklarieren Sie eine Variable außerhalb der Methode. auf Klassenebene ohne Variablentyp
z.B:
quelle
quelle
Konnten Sie nicht herausfinden, was Sie wollen, aber Sie brauchen so etwas? ::
Nun
bValue
enthält den Wert vonb
dem eine Variable in der Schließung ista
. Jetzt können Sie alles tun mitbValue
Lassen Sie mich wissen, wenn ich Ihre Frage falsch verstanden habequelle