2016-11-11 8 views
1

メソッドに何かを記録する特性のファミリーと、具体的なLoggerで実装する必要がある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() 
関連する問題