1
如果有人希望對整個Map
對象應用模式匹配,那麼情況如何?爲什麼不能將不可變的Map實體類定義爲個案類?
例子(儘管不是編譯)將是:
def main(args: Array[String]) {
val m: Map[String, Int] = Map("a" -> 1, "b" -> 2) //scala.collection.immutable.Map2
m match {
case Map2("a",1,"b",2) => println("matched") //conceptual code line
case _ => println("not matched")
}
}
什麼是可能的原因防止Map2
定義的情況下,類?
- 案例類防止封裝內部字段? (如
key1
和value1
...) - 案例類不適用於泛型類型參數?
- 匹配整個Map的稀有用法(通常是無意義的)?
由於Map默認是無序的,因此您的模式匹配可能偶爾會失敗,並且沒有明顯的原因:假設您正在查找Map2(「a」 - > 1,「b」 - > 2),而地圖將按照地圖( 「b」 - > 2 「」 - > 1)。 –
我實際上找到了一種方法來實現這一點,但解決方案有點瘋狂。只要看看「參數化提取器」部分:http://hacking-scala.posterous.com/introduction-to-type-dynamic – tenshi