자바 있습니다스칼라는 메서드 정의에서 여러 매개 변수를 어떻게받을 수 있습니까?
public void someMethod(int ... intArray) { // question: what is the equivalent to "..."
// do something with intArray
}
는 어떻게 스칼라에서 같은 기능을 수행 할 수 있습니까? 즉, 메서드에 정의되지 않은 수의 매개 변수를 전달합니까?
자바 있습니다스칼라는 메서드 정의에서 여러 매개 변수를 어떻게받을 수 있습니까?
public void someMethod(int ... intArray) { // question: what is the equivalent to "..."
// do something with intArray
}
는 어떻게 스칼라에서 같은 기능을 수행 할 수 있습니까? 즉, 메서드에 정의되지 않은 수의 매개 변수를 전달합니까?
def someMethod(values : Int*)
배열을 지정합니다. 가변 인수 매개 변수를 마지막 형식 매개 변수로 넣으십시오.
감사합니다. 매력처럼 작동합니다! – dankilman
스칼라의 배열이 아닙니다. –
자바와 스칼라 모두 varargs가 있으며 둘 다 마지막 매개 변수에만 지원됩니다. this article 가입일
def varargTest(ints:Int*) { ints.foreach(println) }
는 차이가 가변 인자 인자에 사용되는 형태이다
'*'는 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: _*) }
당신은 ': _ *'이 무엇을 의미하는지 설명해 줄 수 있습니까? – IttayD
. "scala varargs"를 검색해보십시오. – Jesper
Google을 위해서 ... elipsis입니다. – daveb
'by-name'변수가있는 varargs가 필요했습니다. 그것은 현재 할 수없는 것 같습니다 : http : // stackoverflow.co.kr/questions/2707186/by-name-repeated-parameters – akauppi