【发布时间】:2013-03-25 15:54:53
【问题描述】:
我对 Groovy 中的范围规则有疑问。在下面的 sn-p 中,我有三个变量,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();
我在 cmets 指示的行上得到 MissingPropertyExceptions。 a 上的异常是预期的,因为该变量具有本地范围。但我希望b 可以在method() 内部访问——它不是。
@Field 在 groovy 1.8.6 中没有做任何事情,尽管升级后它可以工作,所以我猜这是一个老错误。然而,c 在 method() 中是不可访问的。
所以我的问题是:
- 为什么我不能访问内部带有
@Field注释的变量method()? - 如何在
method()中引用脚本变量?
【问题讨论】: