Groovy数组列表中的每个方法

时间:2013-09-05 10:42:21

标签: arrays groovy

我在groovy中的数组列表中遇到了每种方法的奇怪行为。 我给了一段代码。

def list = [
    [2, "foo"].toArray(),
    [4, "bar"].toArray()
]

list.each { def row ->
    println(row.length)
}

这让我在控制台中得到了非常期待的结果

2
2

然后我对这段代码进行了小修改

def list = [
    [2, "foo"].toArray(),
    [4, "bar"].toArray()
]

list.each { Object[] row ->
    println(row.length)
}

结果是

1
1

因为变量行是一个元素,它是我从列表中原始的2个元素数组。

对此有一些解释吗? 我使用groovy 1.8.8或2.1.2

1 个答案:

答案 0 :(得分:2)

我想这是一个功能而不是一个错误:p

闭包声明中的Object []对变量参数有一个特殊的语义:

来自http://groovy.codehaus.org/Closures+-+Formal+Definition

  

Groovy特别支持多余的参数。可以使用Object []类型的最后一个参数声明闭包。如果开发人员这样做,则调用时的任何多余参数都将放在此数组中。这可以用作支持可变数量的参数的形式。

在您的示例中,传递给闭包的参数将使用新的Object数组再次包装,其中包含list作为唯一元素。

举个例子:

def list = [
    [2, "foo"].toArray(),
    [4, "bar"].toArray()
]

def c = {Object[] args -> println args}
c(list)

输出:

[[[2, foo], [4, bar]]]