更改 Julia 中结构体字段值的数组

Lel*_*bur 4 julia

假设我想定义以下对象

mutable struct Coord
x::Float
y::Float
end
Run Code Online (Sandbox Code Playgroud)

并创建一个坐标向量

coordVec = Vector{Coord}(undef, 3)
Run Code Online (Sandbox Code Playgroud)

通过使用 for 循环,我们可以在 中定义坐标的值coordVec,但是如何分配一个新的坐标值呢?我尝试以下方式但不起作用

coordVec[1].x = 3.1
(p->p.x).(coordVec)[1] = 3.1
Run Code Online (Sandbox Code Playgroud)

Jak*_*sen 5

问题是您的数组coordVec未初始化,因为您使用undef来构造数组,这意味着它的值是未定义的:

julia> coordVec = Vector{Coord}(undef, 3)
3-element Array{Coord,1}:
 #undef
 #undef
 #undef
Run Code Online (Sandbox Code Playgroud)

因此您无法更新字段。如果将Coord对象放入数组中,则可以按预期更新它们:

julia> coordVec[2] = Coord(1, 2)
Coord(1.0, 2.0)

julia> coordVec[2].x = 3.0
3.0

julia> coordVec
3-element Array{Coord,1}:
 #undef
    Coord(3.0, 2.0)
 #undef
Run Code Online (Sandbox Code Playgroud)