2016-09-09 2 views
-1

wenn ich habe val myMap = Map("one" ->1, "two" -> 2) und myVar = 2 funktioniert das folgende nicht, warum?Wie kann ich ein Muster mit dem Ergebnis einer Map in scala vergleichen?

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

dies jedoch funktioniert, wenn statt myMap Ich habe eine Variable, z.B. val one = 1 und dann match wird

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

Was versuchst du das eigentlich? Es macht wenig Sinn für mich, Muster auf einer Karte zu finden, anstatt zu versuchen, den Wert aus der Karte zu extrahieren. –

+0

Ich versuche nicht, einen Wert aus der Karte zu extrahieren, sondern assoziiere mich mit einer bestimmten Aktion. Ich habe den Code bearbeitet, um ihn klarer zu machen – John

Antwort

3

Sie eine Fehlermeldung erhalten, weil für Muster, das wir brauchen Umsetzung Unapply Methode passend (für weitere Details lesen this) - in diesem Fall mit solchen Parametern in Karte keine Unapply Methode ist:

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

Als Option Sie dieses stattdessen schreiben:

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