【发布时间】:2021-11-14 00:42:11
【问题描述】:
以下代码无法使用 Scala 2.13.6 编译:
val a = Map(0 -> "0")
val b = Map(1 -> "1")
val c = a.view ++ b.view
c.contains(0)
错误是:
值包含不是 scala.collection.View[(Int, String)] 的成员
Scala 3 或 Scala 2.12.15 中显示了类似的错误。
我发现这出乎意料,因为concat 的实现似乎表明结果应该是一个地图(mapFactory 用于生成结果)。
如何连接两个MapViews 以再次获得MapView?
【问题讨论】:
-
尝试添加
toMap。看看MapView(<not computed>) in Scala -
好吧,我的结果不是 MapView(未计算),而是 View(未计算)。首先使用 toMap 会破坏使用视图的目的。我可以使用一个简单的
a ++ b。我想避免中间集合,因为 a 和 b 非常大。 -
++返回一个View[(Int, String)],它不是map,你不能对它执行contains。你可以做.toMap,或者在每个视图上做包含,或者在结果View上做collectFirst。我没有看到任何其他选项。 -
类似:
val result = Seq(a, b).exists(_.view.contains(0)) -
查看github.com/scala/scala/pull/8082了解一些背景信息。
标签: scala collections