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”关键字,以避免出现奇怪的范围问题或干扰不打算使用的变量。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |