给定复合类型的Julia对象,如何确定其字段?
如果您在REPL中工作,我知道一个解决方案:首先,您通过调用typeof
找出对象的类型,然后进入帮助模式(?
),并且然后查找类型。是否有更多的程序化方法来实现同样的目标?
答案 0 :(得分:14)
适用于v0.7 +
使用fieldnames(x)
,其中x
是DataType
。例如,使用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
返回字段类型的相应向量。