【发布时间】:2016-08-23 13:10:22
【问题描述】:
问题如下:
我有一个抽象类型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 来说已经足够了,但是当使用MyType2 类型的参数调用dosth 时,我希望发生一些特定于MyType2 的额外事情,当然,我想重用现有的代码,所以我尝试了以下,但它没有工作:
function dosth(x::MyType2)
dosth(x::MyAbstract)
println(2)
end
x = MyType2("")
dosth(x) # StackOverflowError
这意味着 Julia 有一段时间没有意识到我试图将 x 视为它的“超类型”。
是否可以从 Julia 的覆盖函数中调用重载函数?我该如何优雅地解决这个问题?
【问题讨论】:
标签: julia abstract overloading