Julia 如何在结构内部使用子阵列?

Julia 如何在结构内部使用子阵列?,julia,Julia,我有一个数组的结构,它是子数组 我使用view()函数测试了一些子数组,以查看它们的类型命名,并使用它将该类型的空值传递给构造函数,但这不起作用: mutable struct SomeType{T<:Real} A::Array{T,1} subA::SubArray{T,1,Array{T,1},Tuple{UnitRange{Int64}},true} # using subA::SubArray solved the problem - ? So

我有一个数组的结构,它是子数组

我使用view()函数测试了一些子数组,以查看它们的类型命名,并使用它将该类型的空值传递给构造函数,但这不起作用:

mutable struct SomeType{T<:Real}
    A::Array{T,1}
    subA::SubArray{T,1,Array{T,1},Tuple{UnitRange{Int64}},true} 
    # using subA::SubArray solved the problem - ?

    SomeType{T}(len) where T<:Real = new(
        Array{T,1}(len),
        SubArray{T,1,Array{T,1},Tuple{UnitRange{Int64}},true} 
        # doesn't work as well: view(Int[1,2,3], 1:3)
        )
end
虽然问题解决了,但我不清楚:

  • 如果我将空的参数化{T}子数组初始化传递给构造函数,它将不起作用-为什么
  • 如何为创建后大小不变的对象声明子数组类型
  • 理解错误并修复构造函数 您的构造函数的第二个版本是正确的。第一个问题是
    S=SubArray{T,1,Array{T,1},Tuple{UnitRange{Int64}},true}
    是一个类型而不是一个实例:它有type
    type{S}
    ,而您真正想要的是一个type
    S
    的对象。这正是调用
    视图创建的内容

    如果您尝试将
    Array{T,1}
    作为第一个参数传递,而不是
    Array{T,1}(len)
    ,则会遇到完全相同的问题。第二个创建实际数组,第一个是类型本身

    改进类型声明 Julia允许您灵活而具体地描述子阵列的类型,在定义
    SomeType
    时利用这一点是有意义的:

    mutable struct SomeType{T<:Real, S<:SubArray{T,1}}
        A::Vector{T}
        subA::S
    end
    
    mutable struct SomeType{t了解错误并修复构造函数
    第二个版本的构造函数是正确的。第一个版本的问题是
    S=SubArray{T,1,Array{T,1},Tuple{UnitRange{Int64}},true}
    是一个类型而不是实例:它具有类型
    type{S}
    ,而您真正想要的是类型为
    S
    的对象。这正是通过调用
    视图创建的对象

    如果您试图将
    Array{T,1}
    作为第一个参数传递,而不是
    Array{T,1}(len)
    ,则会遇到完全相同的问题。第二个参数创建实际数组,第一个是类型本身

    改进类型声明 Julia允许您灵活而具体地描述子阵列的类型,在定义
    SomeType
    时利用这一点是有意义的:

    mutable struct SomeType{T<:Real, S<:SubArray{T,1}}
        A::Vector{T}
        subA::S
    end
    
    mutable struct SomeType{T