Scala:让特征依赖于其他特征

Scala: Let trait depend on other trait

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

听起来你需要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()