2016-09-13 23 views
1

にペアのリストにパターンマッチングを使用しているとき、私はScalaのパターンマッチングを学習し、次の問題が発生しています:コンパイラエラー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") 

私はここで何かを欠場していましたこれを行うにはいくつかの正しい方法ですか?

スカラバージョンは2.11.8です。

ありがとうございました

答えて

2

添付されたペアをかっこで囲む必要があります。メソッド:+は1つのパラメータを受け入れます。余分なカッコがなければ、2つのパラメータが仮定されます。

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