Julia中getattr()的等价物是什么

时间:2016-02-16 15:30:00

标签: julia

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

编辑: 谢谢大家回答这个问题。以下是有关getfieldsetfield!的Julia文档的链接。

2 个答案:

答案 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>