這真是奇怪的現象:除去someClosure聲明前面的「高清」使得JDK1.6的Groovy腳本工作:1.7.3
更新:這是貼在上面的答案。我的錯誤重複它。 更新:爲什麼它有效?如果沒有def,第一行將被視爲一個屬性賦值,它調用setProperty並使綁定中的變量可用,稍後解決。 一個高清應該曾作爲以及每個(http://docs.codehaus.org/display/GROOVY/Groovy+Beans)
someClosure = {
assert "apple", a
print "Done"
}
void testMeasurement() {
prepareData(someClosure)
}
void prepareData(testCase) {
def binding = new Binding()
binding.setVariable("a", "apple")
testCase.setBinding(binding)
testCase.call()
}
testMeasurement()
我可以重現你提到通過下面的代碼的問題。但我不確定這是否是使用Binding的正確方法。 GroovyDocs表示,他們將與腳本一起使用。你能否指出我的文檔暗示了封閉綁定的使用方法。
class TestBinding extends GroovyTestCase {
void testMeasurement() {
prepareData(someClosure)
}
def someClosure = {
assertEquals("apple", a)
}
void prepareData(testCase) {
def binding = new Binding()
binding.setVariable("a", "apple")
//this.setBinding(binding)
testCase.setBinding(binding)
testCase.call()
}
}
這是回答Groovy郵件列表:
在腳本中,DEF foo將創建一個局部變量,而不是一個屬性 (私有字段+的getter/setter)。 想象腳本有點像是run()或main()方法的主體。 這就是你在哪裏以及如何定義局部變量。
添加到我的答案 – 2010-07-14 09:27:06