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()
我想编写一系列特性,其方法应该记录一些东西,以及一个应该在具体记录器中实现的记录器特性,并且只有在混合了记录器时才可以混合上述特性。我只知道特征可以依赖于 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()