복붙노트

[SCALA] 스칼라에서 가변 인자를 사용하여

SCALA

스칼라에서 가변 인자를 사용하여

나는 다음을 수행하는 방법을 알아 내려고 밖으로 내 머리를 찢어하고 있습니다 :

def foo(msf: String, o: Any, os: Any*) = {
    println( String.format(msf, o :: List(os:_*)) )
}

나는 오와 별도로 운영 체제 서열과 방법을 선언해야 할 이유가있다. 기본적으로, (유형 목록의) 단일 개체의 매개 변수를 사용하여 호출 형식의 방법으로 끝낼. 시도 :

def foo(msf: String, o: Any, os: Any*) = {
    println( String.format(msf, (o :: List(os:_*))).toArray )
}

나에게 유형의 오류를 제공합니다 :

나는 컴파일하지만 첫 번째 예제와 거의 같은 이유로 실패 캐스팅을 시도했습니다. 언제 시도

println(String.format(msg, (o :: List(os:_*)) :_* ))

이 암시 적 변환 모호성과 함께 컴파일에 실패 (any2ArrowAssoc 및 any2stringadd)

해결법

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

    1.

    def foo(msf: String, o: AnyRef, os: AnyRef*) = 
      println( String.format(msf, (o :: os.toList).toArray : _* ))
    
  2. ==============================

    2.

    def foo(msf: String, o: AnyRef, os: AnyRef*) =
      println( String.format(msf, o :: os.toList : _* ) )
    

    또는

    def foo(msf: String, o: AnyRef, os: AnyRef*) =
          println( msf format (o :: os.toList : _* ) )
    

    이 로케일 * 지원이 없지만 내가 많이, 후자를 선호합니다.

  3. from https://stackoverflow.com/questions/1008783/using-varargs-from-scala by cc-by-sa and MIT license