以下代碼在Scala 2.13.6下無法編譯:
val a = Map(0 -> "0" /span>)
val b = Map(1 -> "1"/span>)
val c = a.view b.view
c.包含(0)
錯誤是:
value contains不是scala.collection.View[(Int, String)]的成員
。
在Scala 3或Scala 2.12.15中也出現了類似的錯誤。
我發現這出乎意料,因為concat的實作似乎表明結果應該是一個map(mapFactory被用來產生結果)。
我怎樣才能將兩個MapView連接起來,再次得到一個MapView?
uj5u.com熱心網友回復:
基于Remove concat, and overloads from MapView它被設計洗掉了,但也許你仍然可以提供你自己的擴展方法,模仿以前的實作,像這樣
implicit class ConcatMapView[K, V](left: MapView[K, V]/span>) {
def [V1 > : V](right: MapView[K, V1])。) MapView[K, V1] =
new AbstractMapView[K, V1] {
def get(key: K)。Option[V1] = right.get(key) match {
case s @ Some(_)=> s
case _ => left.get(key)
}
def iterator: Iterator[(K, V1) ] = left.iterator
.過濾 { case (k, _) => !right.contains(k) }
.concat(right.iterator)
}
}
val c = a.view b.view // : MapView[Int, String] = MapView((0, "0") , (1, "1"))
c.contains(0) // : Boolean = true
uj5u.com熱心網友回復:
我不知道concat不回傳MapView背后的意圖,但你可以這樣實作你的目標:
val a = Map(0 -> "0" /span>)
val b = Map(1 -> "1"/span>)
val c = a.view b.view
val contains = c.existence((k,v) => k == 0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/326146.html
標籤:
