在朱莉亚,我可以得到一个像这样的字段列表
INPUT:
type Foobar
foo::Int
bar::String
end
baz = Foobar(5,"GoodDay")
fieldnames(baz)
OUTPUT:
2-element Array{Symbol,1}:
:foo
:bar
Run Code Online (Sandbox Code Playgroud)
但是,考虑到我动态找到的名称,如何访问这些字段的值?
fieldvalue(v,fn::Symbol) = eval(Expr(:(.), v, QuoteNode(fn)))
Run Code Online (Sandbox Code Playgroud)
这有点可怕,所以我认为有更好的方法.
INPUT:
function print_structure(v)
for fn in fieldnames(v)
println(fn,"\t", fieldvalue(v,fn))
end
end
print_structure(baz)
OUTPUT:
foo 5
bar GoodDay
Run Code Online (Sandbox Code Playgroud)
getfield(baz, :foo)foo将从变量获取字段,baz即结果将与相同baz.foo.
注意:foo必须是一个符号,因此如果您以某种方式获取字符串中的字段名称,它应该如下使用:getfield(varname, Symbol(fieldnamestring))