所以我试图像这样在Julia中重新调整向量的大小:
A = [Vector{Any}() for i in 1:6]
a, b, c, d, e, f, g, h = 3, 4, 5, 6, 7, 8, 9, 10
for tt = 1:6
a+=1
resize!(A[tt], a)
for rr = 1:a
b+=1
resize!(A[tt][rr], b)
for tt2 = 1:b
resize!(A[tt][rr][tt2], b)
end
end
end
我收到此错误:
UndefRefError:访问未定义的引用
Stacktrace:[1] getindex(:: Array {Any,1},:: Int64)在./array.jl:549 [2]位于./In[70]:7的宏扩展[内联] [3]位于 ./:?
请帮忙吗?
答案 0 :(得分:2)
您的代码有两个问题。
问题1 。 resize!
更改矢量的大小,但不初始化其元素。如果vector的元素类型为Any
,则条目将为#undef
,这意味着未初始化。您必须先对其进行初始化,然后才能访问。
这里是一个例子:
julia> A = Any[]
0-element Array{Any,1}
julia> resize!(A, 1)
1-element Array{Any,1}:
#undef
julia> resize!(A[1], 1) # you get an error
ERROR: UndefRefError: access to undefined reference
Stacktrace:
[1] getindex(::Array{Any,1}, ::Int64) at .\array.jl:549
julia> A[1] = Any[]
0-element Array{Any,1}
julia> A
1-element Array{Any,1}:
Any[]
julia> resize!(A[1], 1) # now it works
1-element Array{Any,1}:
#undef
julia> A
1-element Array{Any,1}:
Any[#undef]
问题2 。您的代码无法在Julia 1.0下运行,因为您正在尝试在循环内修改全局变量(例如,a
行中的a += 1
)。将您的代码包装在一个函数或let
块中,以使其不会引发错误。