Julia 朱莉娅:用“写一个类型的并集”;“抽象类型”;
我正在尝试编写以下类型的并集:Julia 朱莉娅:用“写一个类型的并集”;“抽象类型”;,julia,Julia,我正在尝试编写以下类型的并集: FloatVector = Union{Array{Float64,1}, DataArray{Float64,1}, Array{Union{Float64, Missings.Missing},1}}; 使用抽象类型语法。理想情况下,我想做一些类似的事情。我尝试了以下方法,但不幸的是它不起作用: abstract type FloatVector end type Array{Float64,1} <: FloatVector end type Dat
FloatVector = Union{Array{Float64,1}, DataArray{Float64,1}, Array{Union{Float64, Missings.Missing},1}};
使用抽象类型语法。理想情况下,我想做一些类似的事情。我尝试了以下方法,但不幸的是它不起作用:
abstract type FloatVector end
type Array{Float64,1} <: FloatVector end
type DataArray{Float64,1} <: FloatVector end
type Array{Union{Float64, Missings.Missing},1} <: FloatVector end
抽象类型浮点向量结束
类型数组{Float64,1}在Julia中使用抽象类型无法实现所需的操作<代码>联合
是表示您的需求的一种方式
现在要理解为什么在Julia类型系统中有三个限制:
Any
(除了Union{}
,它没有值,是所有其他类型的子类型,但在实践中可能不需要)
你的定义将违反规则2和规则3。请注意,所有这些类型都已定义(在Base或包中),因此无法重新定义它们(规则#3)。此外,它们已经有一个超类型,因此您无法添加另一个超类型(规则2)。例如,请参见此调用的结果:
julia> supertype(Array{Float64, 1})
DenseArray{Float64,1}
您可以看到,数组{Float64,1}
已经定义,并且有一个超类型
话虽如此,也许另一个更一般的定义对你来说就足够了:
const FloatOrMissingVector = AbstractVector{<:Union{Float64, Missing}}
const FloatOrMissingVector=AbstractVector{谢谢,我想我明白了。您的“FloatOrMissingVector”定义是否适用于数据数组?是的。但是,请注意,DataArrays
已被弃用。请参阅其README.md。谢谢,我错过了!