Scala:有不可变的Set和不可变的Map键变成Covariant吗?

时间:2012-08-21 20:57:11

标签: 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版本也可以编译并运行正常。这将是一个非常有用和重大的变化,我没有注意到任何文档。

1 个答案:

答案 0 :(得分:4)

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

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

(你不能)

var vistas = Set[VistaIn](canv1)

推断为

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

因此canv1非常适合,因为VistaInMapCanvT的超类型。


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