2009-12-02 3 views
47

가변 개수의 인수를 취하는 함수가 주어집니다.스칼라 : var-args 함수에 Seq 전달

def foo(os: String*) = 
    println(os.toList) 

어떻게 함수에 인수 시퀀스를 전달할 수 있습니까? 나는 다음과 같이 쓰고 싶다 :

val args = Seq("hi", "there") 
foo(args) 

분명히 이것은 작동하지 않는다.

+0

도 참조하십시오 : http://stackoverflow.com/questions/1008783/using-varargs-from-scala –

답변

93

foo(args:_*) 트릭을 수행합니다. 시퀀스를 하나의 단일 인수로 적용하는 대신 시퀀스의 각 요소가 인수로 사용됩니다.

+3

위의 함수'''args : _ *'에 코드 검토가 쉽고 두통이 적습니다. '' – Richeek

+0

투명하게 만드는 api를 제공하는 한 가지 방법은'foo'와 같은 프록시 함수를 작성하는 것입니다. 그런 식으로'foo'에 대한 원래 호출은 사용자 코드가 걱정할 필요없이 작동 할 것입니다. 그런데 만약'foo'가'String'과 같은 프리미티브 타입이 아닌'Seq'와 같은 콜렉션을 필요로한다면, 스칼라 콜렉션의 불변성은 당신의 API의 정상적인 사용을 방해 할 것입니다. 마치 변수 인수 목록과 표준 라이브러리 모음이 바닐라 이상의 상호 사용 사례를 위해 설계되지 않은 것처럼 말입니다. – matanster

+0

@Richeek 불행히도, 아니. – Malcolm