變數長度參數拼接
模式和函式引數中變數長度參數串接的語法已變更。新的語法使用後綴 *
,類似於宣告變數長度參數的方式。
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
中,提供從舊語法到新語法的自動重寫。
本文內容