我有一个关于Groovy中的范围规则的问题。在下面的片段中,我有三个变量,a
具有本地范围,b
具有脚本范围,并且c
也应该使用@Field
注释来获取脚本范围。Groovy范围 - 如何在方法中访问脚本变量
#!/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中没有做任何事情,虽然在升级之后它可以工作,所以我猜这是一个老bug。尽管如此,c
在method()
的任何一个版本中都无法访问。
所以我的问题是:
- 为什么我不能访问标注有
@Field
内method()
变量? - 如何参考
method()
中的脚本变量?
敢肯定你的意思是通过这些scriptObject和绑定参数构造函数,一拉“新的主(scriptObject:此,结合:结合)。方法() “ – billjamesdev 2013-03-27 18:16:50
哎呀,谢谢。纠正。 – ataylor 2013-03-27 18:31:13