2015-11-07 53 views
0

我可以创建一个列表,像这样:错误:未发现:价值:::

val value = List(1) ::: 2 :: List(3) 

现在我试图分解等,从而名单:

value match { case a ::: b :: c => (a, b, c) } 

,但我得到error: not found: value :::

为什么我得到这个错误。为什么这种模式不起作用,我应该用什么来代替?

回答

3

假设你有

val xs = List(1, 2, 3, 4) 

,并假设有一个抽取对象,可以提取集合前缀。我应该为

case a ::: b :: c => (a, b, c) 

匹配,则它(多选)

  • (List(1, 2, 3), 4, Nil)
  • (List(1, 2), 3, List(4))
  • (List(1), 2 , List(3, 4))
  • (Nil, 1, List(2, 3, 4))

因为有多种匹配模式的方式,所以上面的提取器不能存在。相反,您可以使用以下内容。

value match { case a :: b :: c => (List(a), b, c) } 
+0

刚刚添加你也可以用这种方式匹配,如果你知道确切的列表大小(3个单元):'value match {case List(a,b,c)=>(a,b,c)}' –