小编典典

Groovy:“def x = 0”中“def”的目的是什么?

all

在下面的一段代码中(取自Groovy Semantics Manual page),为什么要在赋值前加上关键字def

def x = 0
def y = 5

while ( y-- > 0 ) {
    println "" + x + " " + y
    x++
}

assert x == 5

def可以删除关键字,并且此代码段将产生相同的结果。那么关键字的 作用def是什么?


阅读 95

收藏
2022-07-18

共1个答案

小编典典

它是基本脚本的语法糖。省略“def”关键字会将变量放在当前脚本的绑定中,并且 groovy 将其(主要)视为全局范围的变量:

x = 1
assert x == 1
assert this.binding.getVariable("x") == 1

使用 def 关键字不会将变量放在脚本绑定中:

def y = 2

assert y == 2

try {
    this.binding.getVariable("y") 
} catch (groovy.lang.MissingPropertyException e) {
    println "error caught"
}

打印:“错误捕获”

在大型程序中使用 def 关键字很重要,因为它有助于定义可以找到变量的范围并有助于保持封装。

如果您在脚本中定义一个方法,它将无法访问在主脚本主体中使用“def”创建的变量,因为它们不在范围内:

 x = 1
 def y = 2


public bar() {
    assert x == 1

    try {
        assert y == 2
    } catch (groovy.lang.MissingPropertyException e) {
        println "error caught"
    }
}

bar()

打印“错误捕获”

“y”变量不在函数的范围内。“x”在范围内,因为 groovy
将检查当前脚本的变量绑定。正如我之前所说,这只是一种语法糖,可以使快速而肮脏的脚本更快地输入(通常是一行)。

较大脚本中的良好做法是始终使用“def”关键字,这样您就不会遇到奇怪的范围问题或干扰您不打算使用的变量。

2022-07-18