가변 항 스플라이스
가변 항 스플라이스 (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*`
본문
문법 (Syntax)
ArgumentPatterns ::= ‘(’ [Patterns] ‘)’
| ‘(’ [Patterns ‘,’] Pattern2 ‘*’ ‘)’
ParArgumentExprs ::= ‘(’ [‘using’] ExprsInParens ‘)’
| ‘(’ [ExprsInParens ‘,’] PostfixExpr ‘*’ ‘)’
호환성 고려 사항 (Compatibility considerations)
스칼라 2와 스칼라 3 사이의 크로스 컴파일을 가능하게 하기 위해, 컴파일러는 옛 문법과 새 문법을 모두 받아들여요. -source future 설정 아래에서는 옛 문법을 만나면 오류를 내요. -source future-migration 아래에서는 옛 문법에서 새 문법으로의 자동 다시 쓰기가 제공돼요.