przepraszam, jeśli to jest głupi tytuł, nie wiem jak wyrazić to jasnoScala - Pass Typ własnym uwagami klasę do obiektu podrzędnego
że mam cechę rejestrowania:
trait Logging {
def log(s:String)
}
a następnie niektóre realizacja
trait PrintlnLog extends Logging {
def log(s:String) { println(s) }
}
którego używam jak ten
class SomeProcess { this:Logging =>
def doSomeJunk() {
log("starting junk")
...
log("junk finished")
}
}
mogę użyć tej klasy jak
val p = new SomeProcess() with PrintLog
p.doSomeJunk()
co teraz, czy mam to
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")
}
}
w ComplexProcess chcę instancję podproces mieszania w tej samej cechy rejestrowania, które zostały zmieszane w ComplexProcess, ale ComplexProcess nie wie, co to jest. czy istnieje sposób, aby uzyskać odniesienie do niego?
to jest zasadniczo to, co robię, ale jest to brzydkie, ponieważ wszystkie te cechy są rozproszone w całym kodzie, którego jedynym celem jest rejestracja przy użyciu ciastek. miał nadzieję, że jest lepszy sposób – dvmlls