我读过这里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
非常适合,因为 VistaIn
是 MapCanvT
的父类(super class)型。
回答您的问题:Scala 2.10.0 里程碑发布 still have an invariant Set 。 (注意:没有稳定的链接。)
关于Scala:不可变的 Set 和不可变的 Map 键是否变得协变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12062933/