Ich melde ein Feature, das seltsam klingt und das folgende Verhalten bei der Mustererkennung in scala nicht nachvollziehen kann.Scala + Mustererkennung + String Autoboxing
def typesPattern(x:Any)= x match{
case s:String⇒ s.length
case n:Map[Int,Int]⇒println("Map[Int,Int]");var a = n.iterator.next();println(a._1);println(a._2);n.size;
case n:Map[a,b]⇒println("Map[a,b]");n.size;
case m:Map[_,_]⇒ m.size
case _ ⇒ -1
}
}
Wenn ich oben Funktion aufrufen mit println(typesPattern(Map("a"→10)))
folgenden i Fehler Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at scala.runtime.BoxesRunTime.unboxToInt(BoxesRunTime.java:101) at scala.Tuple2._1$mcI$sp(Tuple2.scala:20)
Erste Frage folgende erhalten, die ich ist haben "WARUM MAP [String-> Int] mit MAP immer abgestimmt [INT, INT]? ", sollte es eher mit MAP[_,_]
übereinstimmen.
Interessanterweise, wenn ich den Pattern-Matching-Code bearbeiten und den Code herausnimmt, die Tupel Auszüge aus Karte und Druck Schlüssel-Wert-Paar
`def typesPattern(x:Any)= x match{
case s:String⇒ s.length
case n:Map[Int,Int]⇒println("Map[Int,Int]");n.size;
case n:Map[a,b]⇒println("Map[a,b]");n.size;
case m:Map[_,_]⇒ m.size
case _ ⇒ -1
}
}`
Nun ist der gleiche Aufruf wie früher println(typesPattern(Map("a"→10)))
überein MAP [INT, INT] ohne Probleme und druckt die Größe.
Map[Int,Int]
1
Zweite Frage „WARUM DIESES MAL SCALA IST MÖGLICH MAP ZUBRINGEN [String-> INT] mit MAP [INT> INT] (was ich noch fragen, wie?) Ohne Probleme?
Ich habe es verpasst. Es beantwortet meine Frage danke für die Antwort. – Gurupraveen