2017-09-26 16 views
0

我想@_*與可變參數列表匹配。我試圖使用它作爲以下,但代碼不編譯。@ _ *在Scala中沒有編譯的提取器

val l= List(1,2,3,4,5) 
l match { 
    case (first +: second +: [email protected]_*) => println("atleast 2 elements in the list") 
} 
+1

在你的例子中,只刪除'@ _ *'就可以使它工作。你可以在這裏找到一個很好的解釋:https://stackoverflow.com/a/9229677/7579547 – Shaido

回答

0

兩種可能的解決方案。

讓你的List()匹配一個List()

case List(first, second, [email protected]_*) => . . . 

或匹配您的List()對連接的元素序列:

case first +: second +: rest => . . . 

無論哪種方式,標識符firstsecond將被填充的第1和列表中的第二個值和rest將包含任何剩餘值。

+0

謝謝。是因爲List是使用List(...)還是(a + :(b +:Nil))語法創建的? –

+0

@ManuChadha;是的,或多或少。如果'case'後面跟着一個可以建立一個List()的模式,那麼'List'伴隨對象的'unapplySeq()'方法將被調用以完成模式匹配。 – jwvh

相關問題