什么是多重分派
一般的多态是单重分派,即一个基类指针(或引用)直接到绑定到某一个子类对象上去,以获得多态行为。就像java 那样。
但是Julia多重派发机制,有它自己的特点,这里给出一些代码,并展示多重派发的函数如何回调父类函数。并参考 手册中https://docs.julialang.org/en/v1/base/base/#Core.invoke中关于invoke 的使用。其他一些详细内容可可以参考以下几篇文章:
(2)https://docs.juliacn.com/latest/manual/methods/#%E8%BF%AD%E4%BB%A3%E5%88%86%E6%B4%BE-1
(3)https://zhuanlan.zhihu.com/p/105953560,这篇文章比较好。
代码示例:
x=1
#这是原始的函数,适用与所有的Number类型
function dosth(x::Number)
println(1) # 可以用其他代码替换
end
dosth(x)
#输出
#1
#现在需要对特定于Int64的类型,做一些额外事情,并重用现有的代码,就可以这么做
function dosth(x::Int64)
invoke(dosth, Tuple{Number}, x) #使用invoke,注意传递的参数方式
println(2) #可以添加其他额外的功能
end
dosth(x)
#输出
#1
#2