2

我在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 版本也可以编译并运行良好。这将是一个非常有用且重要的更改,我没有注意到任何文档。

4

1 回答 1

4

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

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

(你不能)

var vistas = Set[VistaIn](canv1)

推断为

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

因此非常canv1适合,因为VistaIn它是MapCanvT.


回答您的问题:Scala 2.10.0 里程碑版本仍然具有不变的 Set。(注意:没有稳定的链接。)

于 2012-08-21T22:15:48.337 回答