TipsというよりFAQの部類ですが、ときどきつまづく方がいるようなので。
Scalaで以下のような可変長引数を取る関数printAll
を定義すると、
def printAll(ss: String*): Unit = { ss.foreach(println) }
printAll("BAZ", "FOO", "BAR") //BAZ //FOO //BAR
のように任意個のStringを渡すことができます。問題は、既に
val fooBar = Seq("FOO", "BAR")
のように既にSeq
型のオブジェクトが作られている場合。
fooBar
をそのまま引数として渡し、printAll(fooBar)
としてしまうと、
(snip) error: type mismatch; found : Seq[String] required: String printAll(fooBar)
というエラーが出てしまいます。これを解決するには、
printAll(fooBar:_*) //FOO //BAR
のようにすればOKです。このようにすれば、scalacがfooBarを可変長引数に一つずつ渡したものとして扱ってくれます。