LoginSignup
3
2

More than 5 years have passed since last update.

実際にあった scala.App の怖い間違い

Last updated at Posted at 2017-05-09

今日見たかもしれない話。

Scala を学び始めると比較的最初の方に出て来るであろう scala.App ってありますね。 継承すると def main() を定義しなくて良いやつ。

object Main extends App {
  println("Hello World")
}

main() 関数が生えるので、次のように実行できます。

Main.main(Array()) // Hello World が印字される

これで App の使い方は覚えました。

さて、次のように同じような object が2つあったとします(Main1Main2)。

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")
}

… さて、何を間違ったでしょうか?

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2