如何获取Julia对象的字段

时间:2017-01-17 00:51:35

标签: object types field julia

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

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

2 个答案:

答案 0 :(得分:14)

适用于v0.7 +

使用fieldnames(x),其中xDataType。例如,使用fieldnames(Date)代替 fieldnames(today()),或者使用fieldnames(typeof(today()))

这将返回Vector{Symbol}按顺序列出字段名称。

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

另一个有用且相关的功能是dump(x)

在v0.7之前

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

答案 1 :(得分:2)

假设对象为obj

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

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

此处,fieldnames(T)返回字段名称的向量,T.types返回字段类型的相应向量。