Scala in Depthには、次の例があります。
trait Logger {
def log(category: String, msg: String) : Unit = {
println(msg)
}
}
trait DataAccess {
def query[A](in: String) : A = {
...
}
}
trait LoggedDataAccess {
val logger = new Logger
val dao = new DataAccess
def query[A](in: String) : A = {
logger.log("QUERY", in)
dao.query(in)
}
}
トレイトLoggedDataAccessでのLoggerとDataAccessの初期化に少し混乱しています。REPLでこのコードを入力すると、次の例外が発生します。
error: trait Logger is abstract; cannot be instantiated
val logger = new Logger
特性は実際にそのように初期化できますか?