6

不知道我问的是否正确,但我有以下内容:

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 语句之外声明所有变量?

4

3 回答 3

5

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

Principle #1: "A variable is only visible in the block it is defined in 
and in nested blocks".

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

于 2012-06-07T13:59:50.910 回答
5

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

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

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

于 2012-06-07T14:34:35.677 回答
2

您可以使用条件运算符来初始化这样的变量。

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"
于 2012-06-07T23:28:49.603 回答