2012-10-05 52 views
1

我是Groovy的新手。我执行下面的Groovy代码:Groovy中的关闭

myList=[234, 34, "Stackoverflow", 3.14] 

myList=myList.collect {if (it instanceof Integer) it*it}  

println myList 

它输出:

[54756, 1156, null, null] 

在我看来,它不应该改变的字符串值。当我改变第二行:

myList=myList.collect {if (it instanceof Integer) it*it else it=it} 

它的工作原理如我所料:

[54756, 1156, Stackoverflow, 3.14] 

我想知道什么是背后的逻辑!

回答

3

由于您的第一个版本中没有else子句,因此结果为null

第二个版本应该像这样,太:

myList.collect {if (it instanceof Integer) it * it else it} 
1

我猜的原因是因为你没有指定的第一个封闭的结果的情况下,一个元素不是一个整数,它默认为null

​println a() 

def a() { 
    if (1==2) "Hello!" 
}​ 

>> null