在 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 在类型参数中编码。