der scala Code:Wie versteht man diesen Scala-Code?
trait Action{
def doAction
}
trait BeforeAfterOfAction extends Action{
abstract override def doAction: Unit ={
println("before")
super.doAction
println("after")
}
}
class Work extends Action{
override def doAction = println("working....")
}
object Test{
def main(args: Array[String]) {
val work = new Work with BeforeAfterOfAction
work.doAction
}
}
das Ergebnis:
before
working....
after
ich denke, es shoud nur "working....
" drucken, aber warum nicht?
Können Sie Prozessdetails erklären?
Sie haben das Merkmal explizit gemischt, deshalb wird Ihre Methode überschrieben. –
Können Sie die Reihenfolge der Ausführung des Details erweitern? – Guo
Die 'abstract' Methode in Ihrem" stackable "Merkmal bietet ausführbares Verhalten - das ist wahrscheinlich das Bit, das Sie falsch verstanden haben, dh. 'abstract override def doAction' wird vor' Work's Version ausgeführt. Zusätzlich zu Sudhirs Referenz macht diese andere Ressource von Artima auch eine ziemlich gute Arbeit, um das Muster zu erklären, das Sie hier implementiert haben - http://www.artima.com/scalazine/articles/stackable_trait_pattern.html – Nio