可変長引数(続き)
可変長引数を受け取る関数定義の引数の型は
Seq になっているので、List や Array を渡せそうだが
そのまま渡すとエラーになる。
scala> def puts(s: String*) = s.foreach(print) puts: (s: String*)Unit scala> val list = List("bar1 ", "bar2 ", "bar3 ") list: List[java.lang.String] = List("bar1 ", "bar2 ", "bar3 ") scala> puts(list) <console>:10: error: type mismatch; found : List[java.lang.String] required: String puts(list)
引数の後に : _* をつけると渡せる。
scala> puts(list: _*) bar1 bar2 bar3
関数定義で可変長引数の関数に引数を渡す場合も
: _* をつけると渡せる。(つけないで渡すとエラーになる。)
scala> def foo(s: String*) = puts(s: _*) foo: (s: String*)Unit
_* は、シーケンスを表すワイルドカードのパターンで
シーケンス内の全要素にマッチさせることができるらしい。