2012-10-05 145 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