問題は以下の通りです:Juliaの上書き機能からオーバーロードされた関数を呼び出すことはできますか?
私は抽象型MyAbstract
を持っており、複合型MyType1
とMyType2
を派生:
abstract MyAbstract
type MyType1 <: MyAbstract
somestuff
end
type MyType2 <: MyAbstract
someotherstuff
end
私はタイプMyAbstract
のオブジェクトのためのいくつかの一般的な動作を指定したいので、私は持っています機能
function dosth(x::MyAbstract)
println(1) # instead of something useful
end
この一般的な動作はMyType1
で十分しかしdosth
があるとき私はMyType2
に特異的で起こるためにいくつかの追加のことをしたい、タイプMyType2
の引数で呼び出されて、もちろん、私は、既存のコードを再利用したいので、私は次のことを試してみましたが、それはうまくいきませんでした:
function dosth(x::MyType2)
dosth(x::MyAbstract)
println(2)
end
x = MyType2("")
dosth(x) # StackOverflowError
これは、ジュリアがx
をその「スーパータイプ」のように扱う試みをしばらく認識していないことを意味します。
Juliaの上書き機能からオーバーロードされた関数を呼び出すことはできますか?どうすればこの問題をエレガントに解決できますか?
ありがとうございました。私はリンクした議論を読みました。 '@ callsuper'という名前は、私がうまくやりたいことを表現しています。 – esel
ありがとう - それは役に立つフィードバックです。私はそれがこれまで最高の名前だと思う。 – StefanKarpinski