가변 항 스플라이스

가변 항 스플라이스 (Vararg Splices)

패턴과 함수 인자에서 가변 항 스플라이스(vararg splice)의 문법이 바뀌었어요. 새 문법은 후위 *를 쓰는데, 가변 항 파라미터(vararg parameter)를 선언하는 방식과 비슷해요.

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*`

출처: Scala 3 Reference

본문

문법 (Syntax)

ArgumentPatterns  ::=  ‘(’ [Patterns] ‘)’
                    |  ‘(’ [Patterns ‘,’] Pattern2 ‘*’ ‘)’

ParArgumentExprs  ::=  ‘(’ [‘using’] ExprsInParens ‘)’
                    |  ‘(’ [ExprsInParens ‘,’] PostfixExpr ‘*’ ‘)’

호환성 고려 사항 (Compatibility considerations)

스칼라 2와 스칼라 3 사이의 크로스 컴파일을 가능하게 하기 위해, 컴파일러는 옛 문법과 새 문법을 모두 받아들여요. -source future 설정 아래에서는 옛 문법을 만나면 오류를 내요. -source future-migration 아래에서는 옛 문법에서 새 문법으로의 자동 다시 쓰기가 제공돼요.