2016-09-09 13 views
-1

もし私がval myMap = Map("one" ->1, "two" -> 2)myVar = 2を持っていれば、以下のことはうまくいかず、どうしてですか?スカラーのMapの結果とパターンマッチングを行うにはどうすればよいですか?

myVar match{ 
    case myMap("one") -> // do a certain action 
    case _   -> // do another action 
} 

これは、しかし、代わりにmyMapの私は、変数を持っている場合、例えば、動作しますあなたはので、我々は適用を解除するメソッドの実装を必要とするパターンマッチングのためのエラーを取得する

myVar match{ 
    case `one` -> "first element" 
    case _  -> "second element" 
} 
+2

何あなたは実際にやろうとしていますか?マップから値を抽出しようとするのではなく、地図上でパターンマッチングを試してみることはほとんど意味がありません。 –

+0

私はマップから値を抽出しようとしていませんが、むしろ特定のアクションに関連付けるために、コードを編集してより明確にしました – John

答えて

3

val one = 1、その後matchになる(詳細はthisを読む) - この場合、地図でそのようなパラメータとは適用を解除する方法はありません。

あなたの代わりにこのように書くことができます。オプションとして

def unapply(z: String): Option[Int]

myVar match { 
    case x if x == myMap("one") => "first element" 
    case _      => "second element" 
}