如何在结构中使用SubArray?

时间:2017-11-25 20:22:51

标签: 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 - ?

    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

尝试创建对象会引发错误:

MethodError: Cannot convert an object of type SubArray{Int64,1,Array{Int64,1},Tuple{UnitRange{Int64}},true} to an object of type SubArray{Int64,1,Array{Int64,1},Tuple{UnitRange{Int64}},true}

直到我在结构字段中注释掉SubArray类型声明的大括号并将构造函数更改为:

function SomeType{T}(len) where T<:Real
    A = Array{T,1}(len)
    subA = view(A, 1:len)
    new(A, subA)
end

虽然问题已经解决,但我并不清楚:

  1. 如果我将空参数{T} SubArray初始化传递给构造函数,它不起作用 - 为什么?
  2. 如何为创建后不改变大小的对象声明SubArray类型?

0 个答案:

没有答案