预分配自定义类型的数组

时间:2013-12-28 23:28:15

标签: arrays types julia

我尝试预分配包含自定义类型的数组。我知道对于像Int这样的简单类型,我可以这样做:

Array(Int, 24)

预先分配一个包含24个整数的数组。但是,当我为自定义类型执行相同操作时:

type spam
   foo
   baz
end

spam_alloc = Array(spam, 24)
24-element Array{spam,1}:
 #undef
 #undef
<snip>
 #undef
 #undef
 #undef

我无法访问spam_alloc的任何元素:

spam_alloc[1]
ERROR: access to undefined reference
 in getindex at array.jl:277

所以我的问题是如何让这个工作。或者有更好的方法来处理自定义类型组?

1 个答案:

答案 0 :(得分:4)

如果值以内联方式存储(bitstypes和immutables),则Array的内容只是随机内存。如果没有,则对象以盒装方式存储,因此它会跟踪分配了哪些对象。这是预分配数组的正确方法,您可以像使用任何其他数组一样分配给它:

spam_alloc[1] = spam(1,2)