在 GitHub 上编辑此页面

新的控制语法

Scala 3 具有新的“安静”控制表达式语法,它不依赖于将条件括在括号中,并且还允许在 for 表达式的生成器周围删除括号或大括号。示例

if x < 0 then
  "negative"
else if x == 0 then
  "zero"
else
  "positive"

if x < 0 then -x else x

while x >= 0 do x = f(x)

for x <- xs if x > 0
yield x * x

for
  x <- xs
  y <- ys
do
  println(x + y)

try body
catch case ex: IOException => handle

详细规则如下

  • 如果 if 表达式的条件后跟 then,则可以不使用括号编写该条件。
  • 如果 while 循环的条件后跟 do,则可以不使用括号编写该条件。
  • 如果 for 表达式的枚举器后跟 yielddo,则可以不使用括号或大括号编写这些枚举器。
  • for 表达式中的 do 表示 for 循环。
  • catch 后面可以跟在同一行上的单个 case。如果有多个 case,则必须将它们放在大括号中(就像在 Scala 2 中一样)或缩进块中。

重写

Scala 3 编译器可以将源代码从旧语法重写为新语法,反之亦然。当使用选项 -rewrite -new-syntax 调用时,它将从旧语法重写为新语法,在条件和枚举器中删除括号和大括号。当使用选项 -rewrite -old-syntax 调用时,它将反向重写,根据需要插入括号和大括号。

本文中