Я хочу написать семейство признаков, методы которых должны регистрировать что-то и характеристику Logger, которая должна быть реализована в конкретных регистраторах, и должно быть возможно смешать только вышеприведенные черты, когда Logger также смешивается. Я знаю только, что черта может зависеть от класса, т. Е. Его можно смешивать только с классами, у которых этот класс является супер-типом. Что я могу сделать?Scala: Пусть свойство зависит от другой черты
1
A
ответ
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()