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 语句之外声明所有变量?
是的,您必须在外部范围内声明变量。
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
如果这是一个脚本,那么@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)