将可堆叠特征与单例对象一起使用
Using stackable trait with singleton object
我的情况和这个问题有点相似:
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()
不幸的是,上面的代码无法编译——我得到:
method pr needs `override' modifier
是否有任何解决方法可以使此解决方案起作用?
如果您将 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
我的情况和这个问题有点相似:
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()
不幸的是,上面的代码无法编译——我得到:
method pr needs `override' modifier
是否有任何解决方法可以使此解决方案起作用?
如果您将 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