我对 Groovy 中的范围规则有疑问。在下面的代码片段中,我有三个变量,a具有本地范围,b具有脚本范围,并且c应该使用@Field注释获取脚本范围。
#!/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();
我MissingPropertyException在注释指示的行上得到 s。预计会出现异常a,因为该变量具有本地范围。但我希望b内部可以访问method()- 它不是。
@Field在 groovy 1.8.6 中没有做任何事情,尽管升级后它可以工作,所以我猜这是一个老错误。然而,无论哪个版本c都无法访问内部method()。
所以我的问题是:
- 为什么我不能访问用
@Fieldinside 注释的变量method()? - 如何引用里面的脚本变量
method()?