0 )-6ren">
gpt4 book ai didi

Groovy: "def"中 "def x = 0"的用途是什么?

转载 作者:行者123 更新时间:2023-12-03 04:15:32 29 4
gpt4 key购买 nike

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

def x = 0
def y = 5

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

assert x == 5

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

最佳答案

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

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

使用 def 关键字不会将变量放入脚本绑定(bind)中:

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 将检查当前脚本的变量绑定(bind)。正如我之前所说,这只是语法糖,可以使快速而肮脏的脚本更快地输入(通常是一行)。

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

关于Groovy: "def"中 "def x = 0"的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/184002/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com