2
我一直在Scala代碼中進行挖掘。它看起來像TreeMap
使用以下構建器類。地圖構建器每次都從頭開始重新創建地圖?
class MapBuilder[A, B, Coll <: scala.collection.GenMap[A, B] with scala.collection.GenMapLike[A, B, Coll]](empty: Coll)
extends Builder[(A, B), Coll] {
protected var elems: Coll = empty
def +=(x: (A, B)): this.type = {
elems = (elems + x).asInstanceOf[Coll]
// the cast is necessary because right now we cannot enforce statically that
// for every map of type Coll, `+` yields again a Coll. With better support
// for hk-types we might be able to enforce this in the future, though.
this
}
def clear() { elems = empty }
def result: Coll = elems
}
我不明白演員,但除此之外。例如,當兩個TreeMap
s是++
- 合在一起時,實例化新的TreeMap
,然後添加來自TreeMap
s的所有鍵值對。由於TreeMap
是不可變的,我們爲什麼不能從TreeMap
之一開始,只是添加其他項目?這是因爲++
適用於不可變和可變類型,所以我們需要製作一個防禦副本,並且一些集合可能有更有效的策略?
你是對的 - 我不知道我是如何錯過的。想到更多的建設者可能是這樣寫的,所以它可以處理地圖,過濾器等。 – schmmd 2012-03-15 16:20:48
正確的 - 並轉換爲不同的集合。 – schmmd 2012-03-15 16:43:51