我想@_*
與可變參數列表匹配。我試圖使用它作爲以下,但代碼不編譯。@ _ *在Scala中沒有編譯的提取器
val l= List(1,2,3,4,5)
l match {
case (first +: second +: [email protected]_*) => println("atleast 2 elements in the list")
}
我想@_*
與可變參數列表匹配。我試圖使用它作爲以下,但代碼不編譯。@ _ *在Scala中沒有編譯的提取器
val l= List(1,2,3,4,5)
l match {
case (first +: second +: [email protected]_*) => println("atleast 2 elements in the list")
}
兩種可能的解決方案。
讓你的List()
匹配一個List()
:
case List(first, second, [email protected]_*) => . . .
或匹配您的List()
對連接的元素序列:
case first +: second +: rest => . . .
無論哪種方式,標識符first
和second
將被填充的第1和列表中的第二個值和rest
將包含任何剩餘值。
謝謝。是因爲List是使用List(...)還是(a + :(b +:Nil))語法創建的? –
@ManuChadha;是的,或多或少。如果'case'後面跟着一個可以建立一個List()的模式,那麼'List'伴隨對象的'unapplySeq()'方法將被調用以完成模式匹配。 – jwvh
在你的例子中,只刪除'@ _ *'就可以使它工作。你可以在這裏找到一個很好的解釋:https://stackoverflow.com/a/9229677/7579547 – Shaido