首页 > 解决方案 > Julia 可变结构中的变量字段名

问题描述

我希望能够使用变量从 Julia 中的可变结构中获取字段。

例如

mutable struct myType
    my_field1::Int = 1
    my_field2::Int = 2
    my_field3::Int = 3
end

然后让我们假设您使用声明此结构的特定实例struct_instance = myType()

如何以可变方式从这个可变结构的实例中提取字段的值?

假设您想使用 for 循环将 my_struct.field[X] 的值分配给一个变量,以便您当前访问的特定字段取决于变量 X:

foo = zeros(Int64, 3)
for X = 1:3
    foo(X) = struct_instance.field[X]
end

我不知道如何实际实现上面的 for 循环——我上面写的只是上面的伪代码。例如,在 MATLAB 中,您将使用以下符号:

foo = zeros(1,3)
for x = 1:3
    foo(x) = struct_instance.(sprintf('field%d',x))
end

提前致谢。

标签: structjuliafield-names

解决方案


从结构中获取字段的函数是fieldnames

julia> mutable struct A
       x
       y
       z
       end

julia> fieldnames(A)
(:x, :y, :z)

要以编程方式设置这些字段值*,您可以使用setproperty!

julia> a = A(1,1,1)
A(1,1,1)

julia> a.x
1

julia> setproperty!(a, :x, 2)
2

julia> a.x
2

使用 for 循环,

julia> for i in fieldnames(A)
           setproperty!(a, i, 3)
       end

julia> a
A(3,3,3)

推荐阅读