I scala Version 2.12.3 verwenden, und wenn ich einige Muster Spiel in Konsolen Code testen:Scala Typ Löschung in Pattern-Matching-Map [String, ANY]
val d: Any = Map("1" -> "2", "3" -> 4)
d match {
case map: Map[String, Any] => println(map)
case _ => println("should not be here")
}
Ich habe einige Warnung wie <console>:14: warning: non-variable type argument String in type pattern scala.collection.immutable.Map[String,Any] (the underlying of Map[String,Any]) is unchecked since it is eliminated by erasure
.
Ich hatte über die Warnung gegoogelt, und fast alle Antworten werden gesagt, dass scala Laufzeit den Typ löscht, wenn Muster übereinstimmen, und es scheint vernünftig zu sein, die Frage zu beantworten, aber wenn ich den folgenden Code verwende:
Es gibt keine Warnung über Typ löschen, also was ist der Unterschied zwischen diesen beiden Arten von Mustererkennung, und erklären Sie bitte, wenn der Typ löschen wird passieren, danke!
Warum zuerst das 'Any' Problem? – cchantep
@cchantep Ich führe das 'Any' Problem zuerst ein, weil ich mich sehr verwirrt über den Typ des Löschens der Mustererkennung fühle, der zweite Codeblock lässt mich ein wenig zweifelhaft für die Laufzeit Type Erase werden. – kemiya
Besser, das erste Problem zu beheben, anstatt zu versuchen, Abhilfe zu schaffen, als Folge davon, die Typsicherheit zu verlieren – cchantep