斯卡拉:让特质取决于其他特质

时间:2016-11-11 16:14:12

标签: scala traits

我想编写一系列特征,其方法应该记录一些东西和Logger特征,这些特征应该在具体的记录器中实现,并且只有在混合Logger时才能混合上述特征。我只知道一个特性可以依赖于一个类,即它只能混合到具有这个类作为超类的类中。我该怎么办?

1 个答案:

答案 0 :(得分:3)

听起来你需要self types,例如

trait Logger {
  def log(msg: String): Unit
}

trait ConsoleLogger extends Logger {
  def log(msg: String): Unit = { println(msg) }
}

trait NeedsLogger { self: Logger =>
  def doSomething(): Unit = {
    self.log("about to do something...")
    self.log("it worked!")
  }
}

object Test extends NeedsLogger with ConsoleLogger {
}

Test.doSomething()