在 GitHub 上編輯此頁面

已移除:存在類型

使用 forSome 的存在類型(如 SLS §3.2.12)已移除。移除它們的原因是

  • 存在類型違反了 DOT 和 Scala 3 建構的類型健全原則。該原則指出類型選擇 p.TS#T 的每個前綴(分別為 pS)都必須來自在執行階段建構的值,或參考已知僅具有良好邊界的類型。

  • 存在類型會與其他 Scala 建構產生許多困難的功能互動。

  • 存在類型在很大程度上與路徑依賴類型重疊,因此擁有它們的收益相對較小。

僅能使用萬用字元(但不能使用 forSome)表示的存在型別仍受支援,但會視為精緻型別。例如,型別

Map[_ <: AnyRef, Int]

會視為型別 Map,其中第一個型別參數的上限為 AnyRef,而第二個型別參數為 Int 的別名。

讀取使用 Scala 2 編譯的類別檔案時,Scala 3 會盡力使用自己的型別來近似存在型別。它會發出警告,表示無法精確模擬。