可变参数拼接
模式和函数参数中可变参数拼接的语法已更改。新语法使用后缀 *
,类似于声明可变参数参数的方式。
val arr = Array(0, 1, 2, 3)
val lst = List(arr*) // vararg splice argument
lst match
case List(0, 1, xs*) => println(xs) // binds xs to Seq(2, 3)
case List(1, _*) => // wildcard pattern
拼接参数的旧语法将逐步淘汰。
/*!*/ val lst = List(arr: _*) // syntax error
lst match
case List(0, 1, xs @ _*) // ok, equivalent to `xs*`
语法
ArgumentPatterns ::= ‘(’ [Patterns] ‘)’
| ‘(’ [Patterns ‘,’] Pattern2 ‘*’ ‘)’
ParArgumentExprs ::= ‘(’ [‘using’] ExprsInParens ‘)’
| ‘(’ [ExprsInParens ‘,’] PostfixExpr ‘*’ ‘)’
兼容性注意事项
为了实现 Scala 2 和 Scala 3 之间的交叉编译,编译器将接受旧语法和新语法。在 -source future
设置下,遇到旧语法时会发出错误。在 -source future-migration
下,提供从旧语法到新语法的自动重写。
本文内容