2017-09-26 2 views
0

@_*이 가변 인수 목록과 일치한다고 가정합니다. 다음과 같이 사용하려고하지만 코드가 컴파일되지 않습니다.스칼라에서 @ _ * 추출기가 컴파일되지 않음

val l= List(1,2,3,4,5) 
l match { 
    case (first +: second +: [email protected]_*) => println("atleast 2 elements in the list") 
} 
+1

예에서 '@ _ *'를 제거하면 제대로 작동합니다. 여기에서 그 사용법에 대한 좋은 설명을 찾을 수 있습니다 : https://stackoverflow.com/a/9229677/7579547 – Shaido

답변

0

두 가지 가능한 해결책.

가지고 당신의 List() 경기 List() :

case List(first, second, [email protected]_*) => . . . 

또는 일치하는 List() 연결된 요소의 순서에 대하여 :

case first +: second +: rest => . . . 

어느 쪽이든, second가 1 위를 채워집니다 식별자 first 및 및 목록의 두 번째 값과 rest은 남아있는 값을 포함합니다.

+0

고마워요. List (...) 또는 (a + :(b + : Nil)) 구문을 사용하여 List가 작성 되었기 때문입니까? –

+0

@ManuChadha; 예, 다소 있습니다. 'case' 다음에'List()'를 만들 수있는 패턴이 오면'List' 컴패니언 객체의'unapplySeq()'메소드가 호출되어 패턴 일치를 완료합니다. – jwvh