1

我是 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]

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

4

2 回答 2

3

由于您的第一个版本中没有else子句,null结果是。

第二个版本也应该像这样工作:

myList.collect {if (it instanceof Integer) it * it else it}
于 2012-10-05T16:50:47.750 回答
1

我猜原因是因为您没有指定第一个闭包的结果,以防元素不是 Integer 并且默认为 null

​println a()

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

>> null
于 2012-10-05T16:52:40.867 回答