2016-11-11 7 views
1

Я хочу написать семейство признаков, методы которых должны регистрировать что-то и характеристику Logger, которая должна быть реализована в конкретных регистраторах, и должно быть возможно смешать только вышеприведенные черты, когда Logger также смешивается. Я знаю только, что черта может зависеть от класса, т. Е. Его можно смешивать только с классами, у которых этот класс является супер-типом. Что я могу сделать?Scala: Пусть свойство зависит от другой черты

ответ

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() 
Смежные вопросы