scusate se questo è un titolo stupido, non so come esprimere chiaramentescala - pass tipo di auto di classe annotata in oggetto figlio
dire che ho un tratto di registrazione:
trait Logging {
def log(s:String)
}
e poi alcuni attuazione
trait PrintlnLog extends Logging {
def log(s:String) { println(s) }
}
che uso simili
class SomeProcess { this:Logging =>
def doSomeJunk() {
log("starting junk")
...
log("junk finished")
}
}
potrei usare questa classe come
val p = new SomeProcess() with PrintLog
p.doSomeJunk()
ora cosa succede se ho questo
class SubProcess { this:Logging =>
def doSubJunk() {
log("starting sub junk")
...
log("finished sub junk")
}
}
class ComplexProcess { this:Logging =>
def doMoreJunk() {
log("starting more junk")
val s = new SubProcess with // ??? <-- help!
s.doSubJunk()
log("finished more junk")
}
}
in ComplexProcess voglio istanziare un sottoprocesso mescolando nello stesso tratto di registrazione che è stato mescolato in ComplexProcess, ma ComplexProcess non sa cosa sia. c'è un modo per ottenere un riferimento ad esso?
questo è essenzialmente quello che sto facendo, ma è brutto perché ho tutti questi tratti sparsi per tutto il mio codice il cui unico scopo è quello di inserire il logging. speravo che ci fosse un modo migliore – dvmlls