上午報告了一個聽起來很奇怪並且無法用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