Julia 如何在结构内部使用子阵列?
我有一个数组的结构,它是子数组 我使用view()函数测试了一些子数组,以查看它们的类型命名,并使用它将该类型的空值传递给构造函数,但这不起作用: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
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
虽然问题解决了,但我不清楚:
S=SubArray{T,1,Array{T,1},Tuple{UnitRange{Int64}},true}
是一个类型而不是一个实例:它有typetype{S}
,而您真正想要的是一个typeS
的对象。这正是调用视图创建的内容
如果您尝试将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