概要

scala.Applicationを継承したクラスは、mainメソッドを書かなくても、クラス起動後に処理が実行される。

尚、起動時に渡したパラメータは利用できない。Scala2.9で導入されるscala.Appでは利用できるという噂あり。

Scaladoc
http://www.scala-lang.org/api/current/scala/Application.html

@CretedDate 2011/05/03
@Versions Scala2.8

サンプル

下記のように書くだけで、Fooクラスを実行すればhello worldが実行される。

object Foo extends Application {
  println("hello world")
}
  //=> hello world

Traitなのでwithでも可。

object Test extends Object with Application {
  println("hello world")
}

実行時間計測

Propertiesにscala.timeが設定されていると、実行時間を表示してくれるようになる。

実行時に下記のように引数を指定する。

$ scala -Dscala.time foo.Test

もしくは、util.PropertiesにsetPropしても可。

object Foo extends Application {
  util.Properties.setProp("scala.time", "")
  println("hello world")
}
  //=> hello world
  //=> [total 18ms]

executionStart

実行開始時間はexecutionStartに格納されている。ので、これを使っても実行時間は分かる。

object Foo extends Application {
  println("hello world")
  println((System.currentTimeMillis - executionStart) + "msec")
}
  //=> hello world
  //=> 17msec

尚、Application内ではSystem.currentTimeMillisではなく、scala.compat.Platform.currentTimeを利用している。これは@inlineアノテーションを指定して、System.currentTimeMillisを呼び出している関数。