在Julia中迭代复合类型的字段

时间:2017-01-17 22:49:17

标签: julia

在Julia中迭代复合(用户定义)类型字段的最佳方法是什么?

让我们说,我定义了以下类型并创建了一个实例:

type Foo
    bar
    baz::Int
    qux::Float64
end
foo = Foo("Hello, world.", 23, 1.5)

如何遍历所有字段,例如将字段及其值打印到REPL?我有一个包含多个字段的类型,我不想明确地为每个字段命名。谢谢

2 个答案:

答案 0 :(得分:8)

fieldnames(foo)为您提供Vector{Symbol}个名称,foo.降低到getfield(foo,...)。所以你只是:

for n in fieldnames(foo)
   println(getfield(foo,n))
end

这显然不利于性能,因为此处不会发生类型推断(您获取字段的类型取决于值n)。

答案 1 :(得分:0)

仅适用于值

for k in 1:length(fieldnames(foo))
    println(getfield(foo,k))
end

似乎有效(Julia 5.1)。仍然没有类型推断,但避免符号查找。