繁体   English   中英

探究数组列表中的每个方法

[英]Groovy each method on list of arrays

我在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

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

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

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

Groovy对多余的参数有特殊的支持。 可以使用对象[]的最后一个参数声明闭包。 如果开发人员执行此操作,则调用时的所有多余参数都将放置在此数组中。 这可以用作支持可变数量的参数的一种形式。

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

举个例子:

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

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

输出:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM