Mam pytanie dotyczące zasad ustalania zakresu w Groovy. W poniższym fragmencie mam trzy zmienne, a
ma zasięg lokalny, b
ma zasięg skryptu, a c
powinien także uzyskać zasięg skryptu przy użyciu adnotacji @Field
.Zakres Groovy - jak uzyskać dostęp do zmiennej skryptowej w metodzie
#!/usr/bin/groovy
import groovy.transform.Field;
//println org.codehaus.groovy.runtime.InvokerHelper.getVersion()
def a = 42;
b = "Tea"
@Field def c = "Cheese"
void func()
{
// println a // MissingPropertyException
println b // prints "Tea"
println c // prints "Cheese" with groovy 2.1.2, MissingPropertyException with groovy 1.8.6
}
class Main
{
def method()
{
// println a // MissingPropertyException
// println b // MissingPropertyException
// println c // MissingPropertyException with both 1.8.6. and 2.1.2
}
}
func();
new Main().method();
Otrzymuję MissingPropertyException
s na liniach oznaczonych komentarzami. Oczekiwane są wyjątki od a
, ponieważ ta zmienna ma zasięg lokalny. Ale oczekiwałbym, że b
będzie dostępny wewnątrz method()
- tak nie jest. @Field
nie robi nic w groovy 1.8.6, chociaż po aktualizacji działa, więc myślę, że to stary błąd. Niemniej jednak, c
jest niedostępne wewnątrz method()
z żadną wersją.
Więc moje pytania to:
- Dlaczego nie mam dostępu do zmiennej opatrzone
@Field
wewnątrzmethod()
? - Jak mogę odnieść się do zmiennej skryptu wewnątrz
method()
?
pewien, że ma na celu przekazać te scriptObject i wiążące argumenty do konstruktora, a la „nowy główny (scriptObject: to, oprawa: wiązanie) .method() " – billjamesdev
Ups, dzięki. Poprawione. – ataylor