scala.Applicationを継承したクラスは、mainメソッドを書かなくても、クラス起動後に処理が実行される。
尚、起動時に渡したパラメータは利用できない。Scala2.9で導入されるscala.Appでは利用できるという噂あり。
Scaladoc
http://www.scala-lang.org/api/current/scala/Application.html
下記のように書くだけで、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に格納されている。ので、これを使っても実行時間は分かる。
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を呼び出している関数。