可変長引数
Scalaにも可変長引数があった。
メソッド定義の引数の型の後に * をつける。
object Foo { def main(argv: Array[String]) { put("aa","bb", "cc", "dd") put("AA", "BB") put() } def put(s: String*) { s.foreach(print); println } }
コンパイル後の class ファイルを scalap してみるとメソッド定義側の引数の型は scala.collection.Seq になっていた。
$ scalap Foo$ package Foo$; final class Foo$ extends scala.AnyRef with scala.ScalaObject { def this(): scala.Unit; def put(scala.collection.Seq): scala.Unit; def main(scala.Array[java.lang.String]): scala.Unit; } object Foo$ { final val MODULE$: Foo$; }
$ scalap Foo object Foo extends java.lang.Object with scala.ScalaObject { def this() = { /* compiled code */ } def main(argv : scala.Array[scala.Predef.String]) : scala.Unit = { /* compiled code */ } def put(s : scala.Predef.String*) : scala.Unit = { /* compiled code */ } }