Scalaのコード:このスケーラコードを理解するには?
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
}
}
結果は次のとおりです。
before
working....
after
私はそれが唯一の "working....
" を印刷しshoudと思いますが、なぜでしょうか?
プロセスの詳細を説明できますか?
明示的に特性を混合すると、メソッドがオーバーライドされます。 –
詳細を実行する順序を削除できますか? – Guo
あなたの "スタック可能な"特性の '抽象'メソッドは実行可能な振る舞いを提供します - それはおそらくあなたが誤解していたビットです。 'abstract override def doAction'は' Work'のバージョンの前に実行されます。 Sudhirのリファレンスに加えて、Artimaのこの他のリソースも、ここで実装したパターンを説明するのに非常に良い仕事をしています - http://www.artima.com/scalazine/articles/stackable_trait_pattern.html – Nio