Groovy:if-then 语句是否具有局部作用域?

use*_*174 6 groovy scope if-statement

不确定我问的是否正确,但我有以下类似的内容:

def x = 1    
if (x == 1) {
   def answer = "yes"
   }
   println answer
Run Code Online (Sandbox Code Playgroud)

我收到错误 - 没有这样的属性:课堂回答...

但是,这有效:

def x = 1
def answer = ''
if (x==1) {
   answer = "yes"
   }
   println answer
Run Code Online (Sandbox Code Playgroud)

这是因为变量在 If 语句中时具有局部作用域吗?有没有更好的方法来对此进行编码,还是我只需要先在 If 语句之外声明所有变量?

0lu*_*sz0 5

是的,您必须在外部范围内声明变量。

Principle #1: "A variable is only visible in the block it is defined in 
and in nested blocks".
Run Code Online (Sandbox Code Playgroud)

有关范围的更多信息:http : //groovy.codehaus.org/Scopeing+and+the+Semantics+of+%22def%22


tim*_*tes 5

如果这是一个脚本,那么@0lukasz0 所说的并非 100% 正确,因为:

def x = 1
if( x == 1 ) {
  // answer is previously undefined -- note no `def`
  answer = "yes"
}
println answer
Run Code Online (Sandbox Code Playgroud)

当变量answer进入当前脚本的绑定时仍然可以工作(因为它没有前面def),所以可以在if块外访问(上面的脚本打印yes