【发布时间】:2011-10-13 04:10:12
【问题描述】:
我有一个类,它带有一个隐式参数,该参数由在类方法内部调用的函数使用。我希望能够覆盖该隐式参数并使类及其继承的父类都具有对同一个新隐式对象的引用。
使 Parent 隐含一个 var 并将其设置为新值成功地覆盖了 parent 中的隐式,而不是 child。
(这类似于scala: override implicit parameter to constructor,除了增加了覆盖影响子类和父类的限制。)
例如:
def outside(implicit x: Boolean) {
println(x)
}
class Parent(implicit var x: Boolean) {
def setImplicit() {
x = true
}
def callOutside {
outside
}
}
class Child(implicit x: Boolean) extends Parent {
override def callOutside {
outside
}
}
然后:
scala> val a = new Parent()(false)
a: Parent = Parent@c351f6d
scala> a.callOutside
false
scala> a.setImplicit()
scala> a.callOutside
true // <-- sees the new implicit correctly
scala> val b = new Child()(false)
b: Child = Child@68331dd0
scala> b.callOutside
false
scala> b.setImplicit()
scala> b.callOutside
false // <-- wrong, desire "true" instead
有什么方法可以得到想要的行为?做一些事情,比如让 Parent 和 Child 都隐式成为一个 var 似乎不起作用。谢谢!
【问题讨论】:
标签: scala