[SCALA] 어떻게 스칼라는 방법 정의에 여러 매개 변수를받을 수 있습니까?
SCALA어떻게 스칼라는 방법 정의에 여러 매개 변수를받을 수 있습니까?
자바는있다 :
public void someMethod(int ... intArray) { // question: what is the equivalent to "..."
// do something with intArray
}
어떻게 스칼라에서 같은 기능을 수행 할 수 있습니까? 즉, 메소드 파라미터 정의되지 않은 수의 전달이다?
해결법
-
==============================
1.
def someMethod(values : Int*)
배열을 제공합니다. 마지막 형식 매개 변수로 변수 인수 매개 변수를 넣습니다.
-
==============================
2.자바와 스칼라 모두 가변 인자를 가지고 있고, 모두 마지막 매개 변수를 지원합니다.
자바와 스칼라 모두 가변 인자를 가지고 있고, 모두 마지막 매개 변수를 지원합니다.
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
'_'형식 유추에 대한 자리 표시 자 바로 가기입니다. 는 '반복 종류에인가 여기서'* _ '이다. 스칼라 사양의 섹션 4.6.2 언급 :
(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: _*) }
from https://stackoverflow.com/questions/1438762/how-can-scala-receive-multiple-parameters-in-a-method-definition by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 주어진 제네릭 형식 스칼라에 의해 클래스의 동반자 오브젝트를 취득 (0) | 2019.11.27 |
---|---|
[SCALA] 왜 "추상적 오버라이드 (override)는"혼자 subtrait에서 "재정의"를하지 필요합니까? (0) | 2019.11.27 |
[SCALA] 어떻게 그 값에 의한 scala.collection.Map [java.lang.String의, 지능] 정렬하려면? (0) | 2019.11.27 |
[SCALA] 스칼라 :지도의 컬렉션을 병합하는 방법 (0) | 2019.11.27 |
[SCALA] 자바의 ClassName.class의 스칼라 이에 상응하는 무엇입니까? (0) | 2019.11.27 |