已弃用:存在类型
使用 forSome
的存在类型(如 SLS §3.2.12 中所述)已被删除。删除它们的原因是
-
存在类型违反了 DOT 和 Scala 3 所构建的类型健全性原则。该原则指出,类型选择
p.T
或S#T
的每个前缀 (p
,分别为S
) 必须来自运行时构建的值,或者引用一个已知只有良好边界的类型。 -
存在类型与其他 Scala 结构创建了许多难以处理的功能交互。
-
存在类型在很大程度上与路径相关类型重叠,因此拥有它们的收益相对较小。
仅使用通配符(但不使用forSome
)可以表达的存在类型仍然受支持,但被视为细化类型。例如,类型
Map[_ <: AnyRef, Int]
被视为类型Map
,其中第一个类型参数的上限为AnyRef
,第二个类型参数是Int
的别名。
在读取用 Scala 2 编译的类文件时,Scala 3 将尽力用自己的类型来近似存在类型。它将发出警告,表明无法进行精确的模拟。