在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。
答案 0 :(得分:3)
您创建了一个Foo
实例,并使用对此实例的引用填充了数组。
您可能希望arr = [Foo(2,4) for i in 1:3]
为每个索引创建Foo(2,4)
的新副本。