已移除:存在類型
使用 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 會盡力使用自己的型別來近似存在型別。它會發出警告,表示無法精確模擬。