如何获取 Julia 对象的字段

How to get fields of a Julia object

给定一个复合类型的 Julia 对象,如何确定它的字段?

如果你在 REPL 中工作,我知道一个解决方案:首先你通过调用 typeof 找出对象的类型,然后进入帮助模式 (?),然后然后查找类型。有没有更程序化的方式来实现同样的事情?

对于 v0.7+

使用 fieldnames(x),其中 xDataType。例如,使用 fieldnames(Date) 而不是 fieldnames(today()),或者使用 fieldnames(typeof(today())).

这 returns Vector{Symbol} 按顺序列出字段名称。

如果字段名称是 myfield,则要检索该字段中的值,请使用 getfield(x, :myfield) 或快捷语法 x.myfield.

另一个有用的相关函数是dump(x)

v0.7 之前

使用 fieldnames(x),其中 x 是您感兴趣的复合类型的实例,或者是 DataType。也就是说,fieldnames(today())fieldnames(Date) 同样有效,并且具有相同的输出。

假设对象是obj,

您可以使用以下代码片段获取其字段的所有信息:

T = typeof(obj)
for (name, typ) in zip(fieldnames(T), T.types)
    println("type of the fieldname $name is $typ")
end

这里,fieldnames(T) returns 字段名称的向量和 T.types returns 对应的字段类型向量。