我有一個關於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