在朱莉娅,我可以得到像这样的字段列表
INPUT:
type Foobar
foo::Int
bar::String
end
baz = Foobar(5,"GoodDay")
fieldnames(baz)
OUTPUT:
2-element Array{Symbol,1}:
:foo
:bar
但考虑到我动态找到的名字,如何访问这些字段的值?
fieldvalue(v,fn::Symbol) = eval(Expr(:(.), v, QuoteNode(fn)))
这有点可怕,所以我认为有更好的方法。
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
答案 0 :(得分:5)
getfield(baz, :foo)
将从变量foo
获取字段baz
,即结果与baz.foo
相同。
注意:foo
必须是一个符号,因此如果您以某种方式获取字符串中的字段名称,则应按如下方式使用:getfield(varname, Symbol(fieldnamestring))
答案 1 :(得分:1)
您也可以使用例如getfield(baz,2)获得第二个字段而不需要知道它的名字。