Es ist syntaktischer Zucker für grundlegende Skripte. Wenn Sie das Schlüsselwort "def" weglassen, wird die Variable in die Bindungen für das aktuelle Skript eingefügt, und groovy behandelt sie (meistens) wie eine Variable mit globalem Gültigkeitsbereich:
x = 1
assert x == 1
assert this.binding.getVariable("x") == 1
Wenn Sie stattdessen das Schlüsselwort def verwenden, wird die Variable nicht in die Skriptbindungen eingefügt:
def y = 2
assert y == 2
try {
this.binding.getVariable("y")
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
Drucke: "Fehler abgefangen"
Die Verwendung des Schlüsselworts def in größeren Programmen ist wichtig, da es dabei hilft, den Bereich zu definieren, in dem die Variable gefunden werden kann, und die Kapselung beizubehalten.
Wenn Sie eine Methode in Ihrem Skript definieren, hat sie keinen Zugriff auf die Variablen, die mit "def" im Hauptteil des Hauptskripts erstellt wurden, da sie nicht im Gültigkeitsbereich liegen:
x = 1
def y = 2
public bar() {
assert x == 1
try {
assert y == 2
} catch (groovy.lang.MissingPropertyException e) {
println "error caught"
}
}
bar()
druckt "Fehler abgefangen"
Die Variable "y" befindet sich nicht im Gültigkeitsbereich der Funktion. "x" ist im Gültigkeitsbereich, da groovy die Bindungen des aktuellen Skripts für die Variable überprüft. Wie ich bereits sagte, ist dies einfach syntaktischer Zucker, um schnelle und schmutzige Skripte schneller zu tippen (oft ein Liner).
In größeren Skripten empfiehlt es sich, immer das Schlüsselwort "def" zu verwenden, damit Sie nicht auf seltsame Probleme mit dem Gültigkeitsbereich stoßen oder Variablen stören, die Sie nicht beabsichtigen.
new FileInputStream('Test.groovy').getChannel()
ohne Import?