上午报告了一个听起来很奇怪并且无法用scala中的模式匹配来推理以下行为的功能。斯卡拉+模式匹配+字符串自动装箱
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
}
}
当调用上文以下println(typesPattern(Map("a"→10)))
我得到以下错误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)
第一个问题我已经是“WHY MAP [与字符串> INT]是越来越与MAP匹配[INT, INT]?“,它应该与MAP[_,_]
更匹配。
有趣的是,当我编辑模式匹配代码,并采取了从地图和打印键和值的对提取的元组的码
`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
}
}`
现在相同的调用等更早println(typesPattern(Map("a"→10)))
确实匹配MAP [INT,INT]没有问题并打印尺寸。
Map[Int,Int]
1
第二个问题 “所以,这一次Scala是能够在不使用的问题MAP [INT-> INT](我仍然不知道怎么样?)比赛地图[与字符串> INT]
我错过了。它的确回答我的问题,谢谢你的回应。 – Gurupraveen