如何获取 Julia 对象的字段
How to get fields of a Julia object
给定一个复合类型的 Julia 对象,如何确定它的字段?
如果你在 REPL 中工作,我知道一个解决方案:首先你通过调用 typeof
找出对象的类型,然后进入帮助模式 (?
),然后然后查找类型。有没有更程序化的方式来实现同样的事情?
对于 v0.7+
使用 fieldnames(x)
,其中 x
是 DataType
。例如,使用 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 对应的字段类型向量。
给定一个复合类型的 Julia 对象,如何确定它的字段?
如果你在 REPL 中工作,我知道一个解决方案:首先你通过调用 typeof
找出对象的类型,然后进入帮助模式 (?
),然后然后查找类型。有没有更程序化的方式来实现同样的事情?
对于 v0.7+
使用 fieldnames(x)
,其中 x
是 DataType
。例如,使用 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 对应的字段类型向量。