【发布时间】:2014-12-19 16:17:58
【问题描述】:
我有这个代码:
trait base{
def msg: Unit= {
println{"base"}
}
}
trait foo extends base {
abstract override def msg: Unit ={
super.msg
println("foo")
}
}
class base2{
def msg:Unit = {
println{"base 2"}
}
}
class test extends base2 with foo{
override def msg: Unit ={
super.msg
println("done")
}
}
如果我打电话给(new test).msg,则会打印出如下内容:base, foo, done
但是,如果我将基本特征更改为:
trait base{
def msg: Unit
}
它会打印出如下内容:base 2, foo, done
我知道with 的顺序是从右到左(最后一个在前)但是extends 怎么样?为什么有时会打印base2,但有时会打印base?
【问题讨论】:
-
这种怪异是我避免蛋糕图案的原因。
-
如果它像在 Groovy 中一样工作,那么您需要将
super.msg添加到base特征,以便它链接到您的base2类。没有在base中实现,base2通过foo的super.msg调用。
标签: scala mixins traits linearization