Zugriff auf Globale variable im statischen Bereich
Gibt es eine Möglichkeit, um auf die globalen Variablen deklariert, die in das Skript, aus dem statischen Methode der Klasse deklariert, die im selben Skript?
Beispielsweise
def s = "12345"
class MyClass {
static def method() {
println s
}
}
Weil auf diese Weise schlägt es fehl, mit dem Fehler
You attempted to reference a variable in the binding or an instance variable from a static context
denen erwartet wird, dass obwohl.
InformationsquelleAutor lapots | 2016-02-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine entsprechende Diskussion zu der Frage:
Groovy - scope -, wie Zugriff auf script-Variablen in einer Methode
Zusammenhang, dass beide Fragen beziehen sich auf die Verwendung einer globalen Variablen innerhalb einer Klasse, aber diese Frage unterscheidet sich etwas, dass Sie suchen, um eine statische Methode, die Sie verändert, wie Sie passieren die Skript-Instanz oder-Bindung (2 Entscheidungen).
Die übergabe der Skript-Instanz
Übergeben dem Skript die Bindung
java
Ansatz? Ich dachte, dass Groovy erlaubt es, das zu tun irgendwie, wie es flexibler.InformationsquelleAutor tylerwal
Gut, das problem ist, dass in Groovy gibt es keine solche Sache wie eine Globale variable. Was ist Locker als eine Globale variable ist eigentlich eine statische Eigenschaft innerhalb einer Klasse.
Zum Beispiel, wenn Sie entfernen die println Linie, so dass der code kompiliert wird, bekommt man sowas aus dem compiler:
Wie Sie sehen können, eine zusätzliche Klasse erstellt, und die die
s
variable deklariert wird innerhalb der Methoderun()
dieser Klasse. Dies macht die variable, die unzugänglich zu Ihren anderen Klasse.Hinweis: Entfernen Sie das
def
wird dieses Problem nicht behandelt.Lösung
Ihre beste Wette ist, um Ihre "Globale Variablen" in eine Klasse, die möglicherweise als statische Eigenschaften, wie:
def
erstellt Variablen innerhalbrun
Methode des Skripts. Ich hätte deklarierte variable ohnedef
. Ich denke, Es könnte möglich sein, zu tun mit einige benutzerdefinierte AST-transformationInformationsquelleAutor Emmanuel Rosa
Sie enthalten eine variable geben Sie mit den
s
variable (mit derdef
- Typ). In einem Groovy-Skript, das behandelt wird wie eine lokale variable und lokalerun()
Methode generiert wird - das ist wie eine Art vonmain()
Klasse. Als Ergebnis, die variable ist nicht verfügbar in anderen Methoden oder Klassen.Wenn Sie entfernen die
def
werden Sie in der Lage zu nutzen, dies
variable.Hier ist die Groovy-Dokumentation erklärt, dass dies weiter.
InformationsquelleAutor mnd