给定一个简单的groovy脚本(不是类!),如何设置方法之外的属性/字段的值?
以下代码无法按预期工作:
def hi;
def setMyVariable() {
hi = "hello world!"
}
setMyVariable()
assert hi == "hello world!" //fails
println hi //prints null
我尝试过很多东西,包括以下内容,但都失败了
...
def setMyVariable() {
this.hi = "hello world!"
}
...
public void setMyVariable() {
hi = "hello world!"
}
...
public String hi;
public void setMyVariable() {
this.hi = "hello world!";
}
设置方法声明外部变量的最简单方法是什么?我唯一可以上班的是以下内容。必须有一个更简单的方法!
def hi;
def setMyVariable() {
this.binding.setVariable("hi", "hello world!")
}
setMyVariable()
println this.binding.getVariable("hi")
assert this.binding.getVariable("hi") == "hello world!" //passes
assert hi == "hello world!" //fails
答案 0 :(得分:4)
您可以为变量指定匿名函数,而不是定义方法:
def hi
def setMyVariable = {
hi = "hello world!"
}
setMyVariable()
assert hi == 'hello world!'
答案 1 :(得分:2)
在Groovy 1.8.x中,您可以这样做:
@groovy.transform.Field def hi
用于将脚本中的变量范围从脚本的run方法更改为脚本的类级别的变量注释。
答案 2 :(得分:1)
看一下Groovy doc的page:
在脚本中定义变量时,它始终是本地的。但方法不属于该范围。因此,使用不同的变量定义一个方法就像它们是属性一样,然后在脚本中正常定义这些变量会导致问题。
在这种情况下,您必须使hi
部分绑定(更简单的方法是不实际使用def
,因此它将自动成为绑定的一部分。)