【发布时间】:2015-12-20 03:35:02
【问题描述】:
我的问题是如何在 Julia 的某个类内重载某些方法?
换句话说,假设我有一个类的以下定义:
type Sometype
prop::String
setValue::Function
# constructor
function Sometype()
this = new ()
this.prop = ""
####### v1 #######
this.setValue = function(v::Real)
println("Scalar Version was Invoked!")
# operations on scalar...
# ...
end
####### v2 #######
this.setValue = function(v::Vector{Real})
println("Vector Version was Invoked!")
# operations on vector...
# ...
end
####### v3 #######
this.setValue = function(v::Matrix{Real})
println("Matrix Version was Invoked!")
# operations on Matrix...
# ...
end
return this
end
end
所以当我在我的主要代码中说:
st = Sometype()
st.setValue(val)
取决于val 是scalar、vector 还是matrix,它会调用setvalue 方法的相应版本。现在,根据上面的定义,它用最后一个(在本例中为矩阵版本)覆盖了setvalue 的定义。
【问题讨论】:
-
setValue是一个Function类型的变量,可以像其他常见变量一样被覆盖。目前看来,julia doesn't support 多次调度anonymous functions。 -
它覆盖
setValue的事实是这里的问题。我想以这样的方式对其进行编码,它将编译setValue的所有版本,其中一个版本被适当地调用为传递的输入val -
您可以使用
generic function,尝试为这些函数赋予相同的名称,例如function foo(v::Real),function foo(v::Vector{Real}),function foo(v::Matrix{Real})。但是,这不是朱莉娅风格,请参阅@David 的回答
标签: julia overloading multiple-dispatch