簡體   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