私は内部クラスメソッドと呼ばれる関数で使用される暗黙のパラメータを取るクラスを持っています。暗黙のパラメータをオーバーライドし、クラスとその継承された親クラスの両方に、同じ新しい暗黙オブジェクトへの参照を持たせたいと考えています。scala:親クラスと子クラスの両方でコンストラクタ内の暗黙的な変数をオーバーライドしますか?
親を暗黙にvarに設定し、それを新しい値に設定すると、親で暗黙的に上書きされますが、子では無効になります。
(オーバーライド子クラスと親クラスの両方に影響を与える追加の制限がある以外は、これは、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 = [email protected]
scala> a.callOutside
false
scala> a.setImplicit()
scala> a.callOutside
true // <-- sees the new implicit correctly
scala> val b = new Child()(false)
b: Child = [email protected]8331dd0
scala> b.callOutside
false
scala> b.setImplicit()
scala> b.callOutside
false // <-- wrong, desire "true" instead
希望の動作を得る方法はありますか?親と子の暗黙の両方をvarとするようなことをすることはうまくいかないようです。ありがとう!