在scala中的对列表上使用模式匹配时编译器错误

时间:2016-09-13 18:31:04

标签: scala compiler-errors pattern-matching

我正在学习Scala模式匹配并遇到以下问题:

假设我有整数列表并使用模式匹配来匹配最后一个元素:

val list = 1 :: 2 :: 3 :: Nil

list match { 
   case xs :+ 3 => println("Matched")
   case _ => println("Not matched")
}

在这种情况下,它可以毫无问题地工作,并且#34;匹配"打印出来。

但是当我使用对列表时问题出现了:

val list = ('a', 1) :: ('b', 2) :: ('c', 3) :: Nil
list match {
   case xs :+ ('c', 3) => println("Matched")
   case _ => println("Not mathed")
}

当我写这篇文章时,我收到以下错误:

<console>:14: error: too many patterns for object :+ offering
(List[(Char, Int)], (Char, Int)): expected 2, found 3
          case xs :+ ('c', 3) => println("Matched")
                  ^
 <console>:14: error: type mismatch; 
 found   : Char('c')
 required: (Char, Int)
          case xs :+ ('c', 3) => println("Matched")

我在这里错过了什么,是否有正确的方法可以做到这一点?

scala版本是2.11.8。

由于

1 个答案:

答案 0 :(得分:2)

您需要用括号括起附加的对。方法:+接受一个参数。如果你没有额外的括号,则假定有两个参数。

list match {
     case xs :+ (('c', 3)) => println("Matched")
     case _ => println("Not mathed")
  }