scala -e "println(List(1, 2, 3).dropRight(1))" List(1, 2)
-e <string> execute <string> as if entered in the repl
特に理由はないです。ただ、REPLを起動しないでワンライナーしたいときに使うといいかもしれません。
scala -e "println(List(1, 2, 3).dropRight(1))" List(1, 2)
-e <string> execute <string> as if entered in the repl
特に理由はないです。ただ、REPLを起動しないでワンライナーしたいときに使うといいかもしれません。
trait Service { trait Logger { def log(message: String): Unit } val logger: Logger def run = { logger.log("Starting " + getClass.getSimpleName + ":") doRun } protected def doRun: Boolean } object MyService1 extends Service { class MyService1Logger extends Logger { def log(message: String) = println("1: " + message) } override val logger = new MyService1Logger def doRun = true def main(args: Array[String]): Unit = { println(doRun) logger.log("hogehoge") } } object MyService2 extends Service { override val logger = MyService1.logger // value logger has incompatible type def doRun = true }
Programming Scalaより。なぜこういうエラーが発生するかというと、traitで定義した変数の型と、それを継承したオブジェクトの中でオーバーライドしようとしている同名の変数の型が違うから。型がパス依存なので、こういう問題が起こるそうな。type mismatchエラーとの違いがよくわかっていません。
Programming Scala: Scalability = Functional Programming + Objects