Groovy:if-then语句有局部作用域吗?
我不确定我问的是否正确,但我有如下几点:Groovy:if-then语句有局部作用域吗?,groovy,if-statement,scope,Groovy,If Statement,Scope,我不确定我问的是否正确,但我有如下几点: def x = 1 if (x == 1) { def answer = "yes" } println answer 我得到错误-没有这样的属性:类的答案 然而,这是可行的: def x = 1 def answer = '' if (x==1) { answer = "yes" } println answer 这是因为变量在If语句中时具有局部作用域吗?是否有更好的方法对此进行编码,或者我只需要首先在
def x = 1
if (x == 1) {
def answer = "yes"
}
println answer
我得到错误-没有这样的属性:类的答案
然而,这是可行的:
def x = 1
def answer = ''
if (x==1) {
answer = "yes"
}
println answer
这是因为变量在If语句中时具有局部作用域吗?是否有更好的方法对此进行编码,或者我只需要首先在If语句之外声明所有变量?是的,您必须在外部范围内声明变量
Principle #1: "A variable is only visible in the block it is defined in
and in nested blocks".
有关作用域的更多信息:
如果这是一个脚本,那么@0lukasz0所说的并不是100%正确,因为:
def x = 1
if( x == 1 ) {
// answer is previously undefined -- note no `def`
answer = "yes"
}
println answer
当变量
answer
进入当前脚本的绑定时仍然有效(因为它前面没有def
),因此可以在if
块之外访问(上面的脚本打印yes
)您可以使用条件运算符初始化这样的变量
def x = 1
def answer = x == 1? "yes" : null
println answer
如果要初始化多个变量,Groovy还支持多重赋值
def (i, j, k) = x == 1? [ 1, 2, 3 ] : []
println "$i $j $k"