來源相容性
Scala 3 並不保證不同次要語言版本之間的來源相容性(例如,3.x 中有效的某些語法可能會在 3.y 中被棄用,然後在 y > x 時逐步淘汰)。Scala 2 中有效的某些語法結構在 Scala 3 中也不再有效。但是,編譯器提供了一種可能性,可以在特定檔案中或在編譯器執行時整體指定要使用的語法版本,以簡化版本之間的遷移。
Dotty 編譯器目前支援的預設 Scala 語言語法版本為 3.2
。也可以指定其他語言版本
-
3.0-migration
:與3.0
和3.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.2-migration
:與3.2
相同,但搭配-rewrite
時,提供從 Scala3.0/3.1
到3.2
的程式碼重寫。 -
3.2
:與3.0
和3.1
相同,但另外 -
3.3-migration
:與3.3
相同 -
3.3
:與3.2
相同,但另外- 更少的括號語法 預設啟用。
-
future-migration
:與future
相同,但有額外的輔助程式,可從3.3
進行遷移。類似於3.0-migration
中提供的輔助程式,這些輔助程式包括遷移警告和可選的重寫。 -
future
:3.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。