已弃用:存在类型
使用 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 将尽力用自己的类型来近似存在类型。它将发出警告,表明无法进行精确的模拟。