2016-11-11 19 views
1

Ich möchte eine Familie von Merkmalen schreiben, deren Methoden sollten etwas protokollieren und eine Logger-Eigenschaft, die in konkrete Logger implementiert werden sollte und es sollte nur möglich sein, die oben genannten Merkmale wenn ein Logger mischen ist auch gemischt. Ich weiß nur, dass ein Merkmal von einer Klasse abhängen kann, d. H. Es kann nur in Klassen gemischt werden, die diese Klasse als Super-Typ haben. Was kann ich tun?Scala: Lassen Merkmal von anderen Merkmal

Antwort

3

Es klingt, als ob Sie self types benötigen, z.

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() 
Verwandte Themen