为什么Scala不可变的HashMap方法返回一个Map?
问题描述:
我在使用scala.collection.immutable.HashMap.I的更新方法时遇到问题,但没有看到它返回Map而不是HashMap的原因。我如何通过添加新的键值对来获得新的HashMap?为什么Scala不可变的HashMap方法返回一个Map?
答
这是预期的行为。 HashMap
作为Map
的具体实施方式是最有用的,涉及使用散列表进行查找。
通常情况下,你会说var values: Map[String, Any] = new HashMap
,然后坐下来使用它,就好像它是普通的ol'immutable Map
。
你有没有理由让你的代码知道它是一个HashMap后,你已经new
'如上所述?
答
如果你使用2.7,这是因为随着时间的推移,集合库已经变得与各种实现类不一致,而不是专门化某些方法的返回类型。这是2.8版集合库重新设计中修复的问题之一。
如果您使用2.8,这是因为update
方法已被弃用,您应该使用updated
来代替。这正确地专门化了返回值。
scala> HashMap(1->1, 2->2, 3->3, 4->4).updated(1,3)
res4: scala.collection.immutable.HashMap[Int,Int] = Map((2,2), (4,4), (1,3), (3,3))
答
在2.7.x,它返回一个Map
,因为它可能是一个ListMap
或TreeMap
或什么的,它被认为是太多的工作,每次重新定义方法。
在2.8.x中,它应该返回一个HashMap
- 但您必须使用updated
(update
已被弃用)。
Aaaaaah,我明白了。最后我得到了我的代码工作!谢谢! – 2010-04-11 20:43:40
很高兴我能帮到你。 – sblom 2010-04-11 20:44:01