在 GitHub 上編輯此頁面

來源相容性

Scala 3 並不保證不同次要語言版本之間的來源相容性(例如,3.x 中有效的某些語法可能會在 3.y 中被棄用,然後在 y > x 時逐步淘汰)。Scala 2 中有效的某些語法結構在 Scala 3 中也不再有效。但是,編譯器提供了一種可能性,可以在特定檔案中或在編譯器執行時整體指定要使用的語法版本,以簡化版本之間的遷移。

Dotty 編譯器目前支援的預設 Scala 語言語法版本為 3.2。也可以指定其他語言版本

  • 3.0-migration:與 3.03.1 相同,但具有 Scala 2 相容模式,有助於將 Scala 2.13 來源轉移到 Scala 3。特別是,它

    • 將一些 Scala 2 結構標記為 Scala 3 中不允許的,並將其作為遷移警告,而不是硬性錯誤,
    • 變更一些規則,使其更寬鬆,並與 Scala 2.13 向後相容
    • 在 Scala 2.13 和 3.0 之間語義發生變更時,會提供一些額外的警告
    • -rewrite 結合使用,提供從 Scala 2.13 到 3.0 的程式碼改寫。
  • 3.03.1:包含在 scala 版本 3.0.03.1.3 中的預設功能集。

  • 3.2-migration:與 3.2 相同,但搭配 -rewrite 時,提供從 Scala 3.0/3.13.2 的程式碼重寫。

  • 3.2:與 3.03.1 相同,但另外

    • 更嚴格的模式繫結 現在已啟用(在早期的 3.x 版本中是 future 的一部分),針對可反駁模式產生警告。這些警告可以靜音處理,以達成相同的執行時期行為,但在 future 中,它們會變成錯誤,而可反駁模式將無法編譯。
    • 非區域回傳 現在在使用時會產生警告(在 future 下仍然是錯誤)。
  • 3.3-migration:與 3.3 相同

  • 3.3:與 3.2 相同,但另外

  • future-migration:與 future 相同,但有額外的輔助程式,可從 3.3 進行遷移。類似於 3.0-migration 中提供的輔助程式,這些輔助程式包括遷移警告和可選的重寫。

  • future3.3 之後 3.x 版本中將引入的變更預覽。此版本中已移除一些 Scala 2 特有的慣用語法。隨著功能的穩定性提升,此版本支援的功能集可能會隨著時間而增加,以供預覽。

有兩種方式可以指定語言版本

  • 使用 -source 命令列設定,例如 -source 3.0-migration
  • 在來源檔案的最上方使用 scala.language 匯入,例如
package p
import scala.language.`future-migration`

class C { ... }

語言匯入會取代在來源檔案中指定的命令列設定。在來源檔案中,只允許一個指定來源版本的語言匯入,而且它必須出現在該檔案中的所有定義之前。

注意: Scala 3 遷移指南 提供更多資訊,以協助 Scala 程式設計師從 Scala 2.13 移轉到 Scala 3。