今日見たかもしれない話。
Scala を学び始めると比較的最初の方に出て来るであろう scala.App
ってありますね。 継承すると def main()
を定義しなくて良いやつ。
object Main extends App {
println("Hello World")
}
main()
関数が生えるので、次のように実行できます。
Main.main(Array()) // Hello World が印字される
これで App の使い方は覚えました。
さて、次のように同じような object が2つあったとします(Main1
と Main2
)。
object Main1 extends App {
def printClassName(): Unit = println("Main1")
println("Start")
printClassName()
println("Finish")
}
object Main2 extends App {
def printClassName(): Unit = println("Main2")
println("Start")
printClassName()
println("Finish")
}
似たような処理が複数箇所にあるのは良くないので、共通の親クラス(SuperMain
)にまとめます。
trait SuperMain extends App {
def printClassName(): Unit
println("Start")
printClassName()
println("Finish")
}
object Main1 extends SuperMain {
def printClassName(): Unit = println("Main1")
}
object Main2 extends SuperMain {
def printClassName(): Unit = println("Main2")
}
… さて、何を間違ったでしょうか?