복붙노트

[SCALA] 어떻게 스칼라는 방법 정의에 여러 매개 변수를받을 수 있습니까?

SCALA

어떻게 스칼라는 방법 정의에 여러 매개 변수를받을 수 있습니까?

자바는있다 :

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

어떻게 스칼라에서 같은 기능을 수행 할 수 있습니까? 즉, 메소드 파라미터 정의되지 않은 수의 전달이다?

해결법

  1. ==============================

    1.

    def someMethod(values : Int*)
    

    배열을 제공합니다. 마지막 형식 매개 변수로 변수 인수 매개 변수를 넣습니다.

  2. ==============================

    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: _*) }
    
  3. from https://stackoverflow.com/questions/1438762/how-can-scala-receive-multiple-parameters-in-a-method-definition by cc-by-sa and MIT license