首页 文章

Groovy:如何从groovy脚本中的方法设置属性/字段/ def?

提问于
浏览
3

问题

给定一个简单的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

3 回答

  • 2

    在Groovy 1.8.x中,您可以这样做:

    @groovy.transform.Field def hi
    

    变量注释,用于将脚本中变量的范围从脚本的run方法更改为脚本的类级别 .

  • 4

    看一下Groovy doc的page

    在脚本中定义变量时,它始终是本地的 . 但方法不是该范围的一部分 . 因此,使用不同的变量定义一个方法就像它们是属性一样,然后在脚本中正常定义这些变量会导致问题 .

    在这种情况下,你必须使 hi 绑定的一部分(更简单的方法是不使用 def 实际上,所以它将自动成为绑定的一部分) .

  • 1

    您可以为变量分配匿名函数,而不是定义方法:

    def hi
    
    def setMyVariable = {
        hi = "hello world!"
    }
    
    setMyVariable()
    assert hi == 'hello world!'
    

相关问题