在 GitHub 上编辑此页面

已弃用:存在类型

使用 forSome 的存在类型(如 SLS §3.2.12 中所述)已被删除。删除它们的原因是

  • 存在类型违反了 DOT 和 Scala 3 所构建的类型健全性原则。该原则指出,类型选择 p.TS#T 的每个前缀 (p,分别为 S) 必须来自运行时构建的值,或者引用一个已知只有良好边界的类型。

  • 存在类型与其他 Scala 结构创建了许多难以处理的功能交互。

  • 存在类型在很大程度上与路径相关类型重叠,因此拥有它们的收益相对较小。

仅使用通配符(但不使用forSome)可以表达的存在类型仍然受支持,但被视为细化类型。例如,类型

Map[_ <: AnyRef, Int]

被视为类型Map,其中第一个类型参数的上限为AnyRef,第二个类型参数是Int的别名。

在读取用 Scala 2 编译的类文件时,Scala 3 将尽力用自己的类型来近似存在类型。它将发出警告,表明无法进行精确的模拟。