[英]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.