修改数组中复合类型的成员值

时间:2014-08-10 21:44:03

标签: arrays record julia

在Julia(0.3.0-rc1)中,当我fill一个包含复合类型实例的数组并更新单个实例的成员时,数组中的所有实例都会更新。这是预期的行为,如果是这样,我应该如何更改数组中单个元素的值?

有问题的代码:

type Foo
    x :: Int
    y :: Int
end

arr = fill(Foo(2, 4), 3)
arr[2].x = 5

我希望[Foo(2, 4), Foo(5, 4), Foo(2, 4)],但我得到[Foo(5, 4), Foo(5, 4), Foo(5, 4)]。我究竟做错了什么?我应该总是更新整个元素,如arr[2] = Foo(5, 4)(给出预期结果)吗? TIA。

1 个答案:

答案 0 :(得分:3)

您创建了一个Foo实例,并使用对此实例的引用填充了数组。

您可能希望arr = [Foo(2,4) for i in 1:3]为每个索引创建Foo(2,4)的新副本。