ese*_*sel 7 overloading abstract julia
问题如下:
我有一个抽象类型MyAbstract和派生的复合类型MyType1和MyType2:
abstract MyAbstract
type MyType1 <: MyAbstract
somestuff
end
type MyType2 <: MyAbstract
someotherstuff
end
Run Code Online (Sandbox Code Playgroud)
我想为类型的对象指定一些一般行为MyAbstract,所以我有一个函数
function dosth(x::MyAbstract)
println(1) # instead of something useful
end
Run Code Online (Sandbox Code Playgroud)
这种一般行为足以满足MyType1但是当dosth使用类型的参数调用时MyType2,我想要一些特定的其他事情MyType2,当然,我想重用现有的代码,所以我尝试了以下,但它没有用:
function dosth(x::MyType2)
dosth(x::MyAbstract)
println(2)
end
x = MyType2("")
dosth(x) # StackOverflowError
Run Code Online (Sandbox Code Playgroud)
这意味着朱莉娅x有一段时间没有认识到我试图像对待它的"超类型"一样.
是否可以从Julia中的覆盖函数调用重载函数?我怎样才能优雅地解决这个问题?
你可以使用这个invoke功能
function dosth(x::MyType2)
invoke(dosth, (MyAbstract,), x)
println(2)
end
Run Code Online (Sandbox Code Playgroud)
使用相同的设置,这将提供以下输出而不是堆栈溢出:
julia> dosth(x)
1
2
Run Code Online (Sandbox Code Playgroud)
可以在此处找到关于替换或改进接口的讨论invoke.我的建议会使语法与你在问题中写的非常接近:
function dosth(x::MyType2)
@invoke dosth(x::MyAbstract)
println(2)
end
Run Code Online (Sandbox Code Playgroud)
如果您对比"调用"更直观的名称有任何想法,请在下面发表评论.
| 归档时间: |
|
| 查看次数: |
199 次 |
| 最近记录: |