我想做这个:
trait Renderable {
def render: String
}
trait Parens extends Renderable {
abstract override def render = "(" + super.render + ")"
}
object Foo extends Renderable with Parens {
def render = "Hello"
}
但这不起作用,因为线性化顺序将 Parens 放在 Foo 之后(当然,Foo 总是出现)所以 Parens 不能建议 Foo.render。
我最终这样做:
trait FooRender {
def render = "Hello"
}
object Foo extends FooRender with Parens {
}
但有时我真的不想这样做,因为它会破坏事情。据我所知,线性化顺序是唯一的障碍,但我不知道有什么方法可以改变它。什么可以使这个更清洁?