2016-09-13 54 views
1

成對列表匹配我學習Scala模式匹配和遇到以下問題時:編譯器錯誤使用模式在斯卡拉

假設我有一個整數的列表,並使用模式匹配的最後一個元素匹配:

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

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

在這種情況下,它工作沒有問題,並打印「匹配」。

但問題是當我用對的列表,而不是:

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。

謝謝

回答

2

您需要用括號括起附加的對。方法:+接受一個參數。如果您沒有額外的括號,則假定有兩個參數。

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