加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 16:41:18 所属栏目:大数据 来源:网络整理
导读:在下面的代码片段(取自 Groovy User Guide),为什么在前缀的关键字def? def x = 0def y = 5while ( y-- 0 ) { println "" + x + " " + y x++}assert x == 5 可以删除def关键字,并且此代码段将产生相同的结果。那么关键字def的效果是什么? 解决方法 它是基
在下面的代码片段(取自 Groovy User Guide),为什么在前缀的关键字def?

def x = 0
def y = 5

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

assert x == 5

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

解决方法

它是基本脚本的语法糖。省略“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”关键字,以避免出现奇怪的范围问题或干扰不打算使用的变量。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读