あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

可変長引数

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 */ }
}