我的情况与这个问题有点类似:
Can the stackable trait pattern be used with singleton objects?
但差别很小。我所拥有的可以简化为以下形式:
abstract class Pr {
def pr()
}
trait PrePostPr extends Pr {
var NUMERIC_VAR: Int = _
abstract override def pr() {
NUMERIC_VAR = 5 // number is being extracted eg. from conf file
super.pr()
}
}
现在我真的希望有一个单例对象来检查常量,依赖它会以下列方式采取进一步的操作:
class ImplPr extends Pr with PrePostPr {
def pr() = if(NUMERIC_VAR > 5) println("Foo") else println("Bar")
}
object Foo extends ImplPr
Foo.pr()
不幸的是,上面的代码没有编译 - 我得到了:
方法pr需要`覆盖'改性剂
是否有解决方法使此解决方案有效?
答案 0 :(得分:2)
如果将NUMERIC_VAR
移动到不同的特征,它会起作用:
trait NumericVarHolder {
var NUMERIC_VAR: Int = _
}
abstract class Pr {
def pr()
}
trait PrePostPr extends Pr {
self: NumericVarHolder =>
abstract override def pr() {
NUMERIC_VAR = 5 // number is being extracted eg. from conf file
super.pr()
}
}
class ImplPr extends Pr with NumericVarHolder {
def pr() = if(NUMERIC_VAR > 5) println("Foo") else println("Bar")
}
object Foo extends ImplPr