在 Julia 中,声明 AbstractVector{AbstractVector}
In Julia, declare AbstractVector{AbstractVector}
我有兴趣定义一个结构,它有一个字段,它是一个向量的向量。可能(但不一定),内部向量的类型为 SVector
(在 StaticArrays 包中定义)。我天真的方法是声明字段 x::AbstractVector{AbstractVector{T}}
;然而,julia 并不认为 Vector{SVector{3, Float64}}
是 AbstractVector{AbstractVector}
的实例。就此而言,它也不认为 Vector{Vector{64}}
是 AbstractVector{AbstractVector}
。似乎包含的类型必须是具体类型,或者完全忽略。我是不是用错了方法?
使用AbstractVector{<:AbstractVector}
,因为这是一个结构,接受元素类型是AbstractVector
.
的任何向量
相反 AbstractVector{AbstractVector}
要求元素类型完全 AbstractVector
。
通常不建议使用带有抽象字段的结构,尤其是出于性能原因。在结构字段中,AbstractVector{<:AbstractVector}
是抽象的,即使 eltype 是具体的。
在函数签名中使用 AbstractVector{<:AbstractVector}
没问题,但可能不适用于结构定义。试试这个:
struct Foo{T<:AbstractVector{<:AbstractVector}}
x::T
end
这将为您提供一个具体类型的字段,其中字段的类型 x
在类型参数中编码。
我有兴趣定义一个结构,它有一个字段,它是一个向量的向量。可能(但不一定),内部向量的类型为 SVector
(在 StaticArrays 包中定义)。我天真的方法是声明字段 x::AbstractVector{AbstractVector{T}}
;然而,julia 并不认为 Vector{SVector{3, Float64}}
是 AbstractVector{AbstractVector}
的实例。就此而言,它也不认为 Vector{Vector{64}}
是 AbstractVector{AbstractVector}
。似乎包含的类型必须是具体类型,或者完全忽略。我是不是用错了方法?
使用AbstractVector{<:AbstractVector}
,因为这是一个结构,接受元素类型是AbstractVector
.
相反 AbstractVector{AbstractVector}
要求元素类型完全 AbstractVector
。
通常不建议使用带有抽象字段的结构,尤其是出于性能原因。在结构字段中,AbstractVector{<:AbstractVector}
是抽象的,即使 eltype 是具体的。
在函数签名中使用 AbstractVector{<:AbstractVector}
没问题,但可能不适用于结构定义。试试这个:
struct Foo{T<:AbstractVector{<:AbstractVector}}
x::T
end
这将为您提供一个具体类型的字段,其中字段的类型 x
在类型参数中编码。