源代码兼容性
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 3 中不允许的 Scala 2 结构标记为迁移警告,而不是硬错误。
- 更改了一些规则,使其更宽松,并与 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。