2009-12-02 8 views
47

可変数の引数をとる関数が与えられます。Scala: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

関連する問題