这真是奇怪的现象:除去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