在Groovy中关闭

时间:2012-10-05 16:47:11

标签: 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]

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

2 个答案:

答案 0 :(得分:3)

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

第二个版本应该也是这样的:

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

答案 1 :(得分:1)

我想原因是因为你没有指定第一个闭包的结果,如果一个元素不是一个整数并且它默认为null

​println a()

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

>> null