![](/img/trans.png)
[英]How do I call an auxiliary base-class constructor from a derived-class auxiliary constructor in Scala?
[英]How can I call a super class method from a code block in a derived class?
這個問題很難概括。 下面的代碼塊顯示了我想做什么。 我有一個這樣的基類:
`class Base {
def methA:String="ook"
def methB:Int=1
}
我還有一個派生類,我希望每個子類方法兩次調用超類方法,比較結果並在不匹配時拋出異常(這是針對測試場景的)。
但是如果我寫
class Derived extends Base {
private def callDoublyAndCompare[T](fun:()=>T) : T = {
val fst=fun()
val snd=fun()
if(fst!=snd) throw new RuntimeException(s"Mismatch fst=$fst != snd=$snd")
snd
}
override def methB:Int={
callDoublyAndCompare(() => super[Derived].methB)
}
}
然后,它將無法編譯。 解決此問題的唯一方法是提取類Derived中的方法,該方法僅調用超類的methB並從lambda調用中進行調用。
有沒有更好的辦法?
我了解您要調用超級調用方法。 希望下面是您想要的。
您可以使用關鍵字“ super
only”按如下方式調用
(new Derived).methB
。 這將根據您的代碼兩次調用callDoublyAndCompare
超級調用方法。
class Derived extends Base {
private def callDoublyAndCompare[T](fun:()=>T) : T = {
val fst=fun()
val snd=fun()
if(fst!=snd) throw new RuntimeException(s"Mismatch fst=$fst != snd=$snd")
snd
}
override def methB:Int={
callDoublyAndCompare(() => super.methB) //kept only super
}
}
就Derived類被定義為另一個Scala類的內部類而言,原始示例尚未完全完成。 在我將這個內部類移到最高級別之后,上面Praveen的示例突然起作用了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.