我有类似下面的代码。我想在每个bar
函数的末尾添加一些代码,例如foo
。我想我可能需要使用type
类和implicit
或abstract override
。有什么想法吗?提前谢谢。
trait A {
def foo = { //do something }
}
case class B() extends A {
def bar = {
// do other stuff
// automatically call foo
}
}
case class C() extends A {
def bar = {
// do different stuff
// automatically call foo
}
}
答案 0 :(得分:1)
您无法自动拨打电话。编译器应该如何知道要调用什么?魔法?
你可以impl。默认bar
并致电super.bar
def bar = foo
....
def bar = {
//do stuff
super.bar
}
但除非bar
调用多个方法,否则这是无用的。
答案 1 :(得分:1)
听起来你在面向方面的编程中正在寻找类似after
的东西。在任何OO语言中执行此操作的最简单方法是遵循公共方法始终是最终的规则。这将基类和派生类之间的接口与基类和调用者之间的接口分开。那就是:
trait A {
private def foo = { }
protected def on_bar = { }
final def bar = { on_bar; foo; }
};
case class B() extends A {
def on_bar = { do_other_stuff; }
}
答案 2 :(得分:0)
不完全清楚你的目标是什么,但听起来与stackable trait pattern类似。看看并判断它是否是您想要的东西,在这种情况下,我可以提供更多信息,即使该文章非常明显。