【问题标题】:Modifying member values of composite types in an array修改数组中复合类型的成员值
【发布时间】:2014-08-10 21:44:03
【问题描述】:

在 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。

【问题讨论】:

    标签: arrays record julia


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,就是这样。
    猜你喜欢
    • 2020-11-23
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多