2009-09-17 1 views
28

자바 있습니다스칼라는 메서드 정의에서 여러 매개 변수를 어떻게받을 수 있습니까?

public void someMethod(int ... intArray) { // question: what is the equivalent to "..." 
    // do something with intArray 
} 

는 어떻게 스칼라에서 같은 기능을 수행 할 수 있습니까? 즉, 메서드에 정의되지 않은 수의 매개 변수를 전달합니까?

+4

. "scala varargs"를 검색해보십시오. – Jesper

+1

Google을 위해서 ... elipsis입니다. – daveb

+0

'by-name'변수가있는 varargs가 필요했습니다. 그것은 현재 할 수없는 것 같습니다 : http : // stackoverflow.co.kr/questions/2707186/by-name-repeated-parameters – akauppi

답변

38
def someMethod(values : Int*) 

배열을 지정합니다. 가변 인수 매개 변수를 마지막 형식 매개 변수로 넣으십시오.

+0

감사합니다. 매력처럼 작동합니다! – dankilman

+0

스칼라의 배열이 아닙니다. –

48

자바와 스칼라 모두 varargs가 있으며 둘 다 마지막 매개 변수에만 지원됩니다. this article 가입일

def varargTest(ints:Int*) { ints.foreach(println) } 

는 차이가 가변 인자 인자에 사용되는 형태이다

  • 스칼라 자바
  • 서열 (서열)에 대한 배열 :는 반복 될 수 있고, 많은 방식 등 컬렉션은 foreach, map, filter, find, ...가 있습니다.

'*'는 0 개 이상의 인수를 나타냅니다.

참고 :

# varargTest(List(1,2,3,4,5)) 
# //--> error: type mismatch; 
# //--> found : List[Int] 
# //--> required: Int 
# //-->  varargTest(List(1,2,3,4,5)) 
# //--> 

을하지만이 통과 할 것이다 : 매개 변수 값이 이미 목록과 같은 순서로 "패키지"경우, 이것은 실패

varargTest(List(1,2,3):_*) 
    //--> 1 
    //--> 2 
    //--> 3 

'_'일 형식 유추에 대한 자리 표시 자 바로 가기입니다. '_*'은 '반복되는 유형'에 적용됩니다. Scala Specification
섹션 4.6.2 언급 :

파라미터 섹션의 마지막 값 파라미터는 "*” 예컨대 접미사 될 수도 (..., x:T *).
메서드 내에서 반복되는 매개 변수의 유형은 시퀀스 형식 scala.Seq[T]입니다.
반복 매개 변수가있는 메소드 T*T 유형의 가변 개수의 인수를 사용합니다. 마지막 인자는 타입 주석 _* 통해 시퀀스 인수로 표시된 경우

(T1, . . . , Tn,S*)U => (T1, . . . , Tn,S, . . . , S)U, 

이 규칙에 대한 유일한 예외이다.

(e1, . . . , en,e0: _*) => (T1, . . . , Tn, scala.Seq[S]). 

주 비스 : 자바의 기본 유형의 삭제에주의 :이 (: 가변 인수) "가변 인자"라고

//--> error: double definition: 
//--> method varargTest:(ints: Seq[Int])Unit and 
//--> method varargTest:(ints: Int*)Unit at line 10 
//--> have same type after erasure: (ints: Sequence)Unit 
//--> def varargTest(ints:Seq[Int]) { varargTest(ints: _*) } 
+0

당신은 ': _ *'이 무엇을 의미하는지 설명해 줄 수 있습니까? – IttayD