gpt4 book ai didi

julia - Julia中类方法的多次调度

转载 作者:行者123 更新时间:2023-12-04 17:17:32 25 4
gpt4 key购买 nike

我的问题是如何重载某些方法 内 Julia 的某个类(class)?

换句话说,假设我有一个类的以下定义:

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标量 , 矢量 矩阵 它将调用 setvalue 的相应版本方法。现在,根据上面的定义,它覆盖了 setvalue 的定义。最后一个(在这种情况下为矩阵版本)。

最佳答案

这种类型的面向对象编程 (OOP),其中函数存在于对象中,在 Julia 中没有使用。

相反,在 Julia 中,我们只是在对象定义之外定义方法。例如。:

type Sometype
prop::String
end

Sometype(v::Real) = ...

function Sometype{T}(v::Vector{T}) # parametric type
....
end

请注意,第一个定义是在单行上定义简单函数的简写方式示例,第二个示例用于更复杂的函数。

正如@GnimucKey 所指出的,而不是 v::Vector{Real} , 你应该使用 v::Vector{T}函数由 T 参数化.我已经相应地改变了我的答案。指定为 v::Vector{Real} 的参数永远不会匹配参数,因为不可能创建抽象类型的对象 Real ,并且类型的不变性意味着像 Vector{Float64} 这样的对象不是 Vector{Real} 的子类型.

关于julia - Julia中类方法的多次调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32729038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com