在 GitHub 上編輯此頁面

變數長度參數拼接

模式和函式引數中變數長度參數串接的語法已變更。新的語法使用後綴 *,類似於宣告變數長度參數的方式。

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 中,提供從舊語法到新語法的自動重寫。