Scala:不可变的 Set 和不可变的 Map 键是否变得协变?

标签 scala scala-collections

我读过这里StackOverflow还有一些地方,Scala 的不可变 Set 和不可变 Map 中的 Key 是不变的。

但是以下代码在 2.10.0M5 中编译并运行良好

type MapCanvT <: Component with VistaIn
def newMapCanv: MapCanvT
val canv1 = newMapCanv
var vistas = Set[VistaIn](canv1)// Map[VistaIn, Option[CSplit]]((canv1, None))

被注释掉的 Map 版本也可以正常编译和运行。这将是一个非常有用且重大的更改,但我没有注意到任何文档。

最佳答案

协方差意味着你可以这样做:

var vistas: Set[VistaIn] = Set[MapCanvT](canv1)

(你不能)

var vistas = Set[VistaIn](canv1)

推断为

var vistas = Set[VistaIn](canv1: VistaIn)

因此 canv1 非常适合,因为 VistaInMapCanvT 的父类(super class)型。


回答您的问题:Scala 2.10.0 里程碑发布 still have an invariant Set 。 (注意:没有稳定的链接。)

关于Scala:不可变的 Set 和不可变的 Map 键是否变得协变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12062933/

相关文章:

scala - 如何在 Scala 中修补新的控制结构?

java - 如何从 Java 调用 Scala 单例方法?

algorithm - 如何从另一个列表中删除一个列表的每个实例?

list - Scala将Collection转换为Key-key的最佳方法? (第二变种)

scala - 在到达第一个None时如何停止构建Option [Collection]?

scala - 在 yarn 簇上使用带有管道的 addFile

scala - 对片段真的很困惑

scala - Play Scala 应用程序测试中的依赖注入(inject)

scala - 如何定义可以是 Array 或 List 的变量

scala - API 设计 - 混合先决条件检查索引越界?