Julia中Python的getattr()相当于什么?我尝试了以下元编程代码,但它只适用于全局范围,而不是在函数范围内。
type A
name
value
end
a = A("Alex",1)
for field in fieldnames(a)
println(eval(:(a.$field)))
end
这将打印出来:
Alex
1
但是,如果以上是在功能范围内,那么它就不会起作用
function tmp()
a = A("Alex",1)
for field in fieldnames(a)
println(eval(:(a.$field)))
end
end
tmp()
错误是:
ERROR: LoadError: UndefVarError: a not defined
答案 0 :(得分:10)
您想使用getfield
。
julia> function tmp()
a = A("Alex",1)
for field in fieldnames(a)
println(getfield(a, field))
end
end
tmp (generic function with 1 method)
julia> tmp()
Alex
1
答案 1 :(得分:7)
您正在寻找getfield
功能:
julia> type A
name
value
end
julia> function foo()
a = A("Alex", 1)
for field in fieldnames(a)
@show getfield(a, field)
end
end
foo (generic function with 1 method)
julia> foo()
getfield(a,field) = "Alex"
getfield(a,field) = 1
julia>