我有一个带数组的结构,它是子数组。
我已经使用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
虽然问题已经解决,但我并不清楚: