2016-02-16 11 views
6

JuliaのPythonのgetattr()に相当するものは何ですか?次のメタプログラミングコードを試しましたが、関数スコープ内ではなく、グローバルスコープでのみ動作します。Juliaの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 

編集: 質問にお答えいただき、ありがとうございます。 Juliaのドキュメントへのリンクは、getfieldsetfield!です。

答えて

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 
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> 
+1

ありがとうございました! Juliaのドキュメント(http://docs.julialang.org/en/release-0.4/stdlib/base/?highlight=getfield#Base.getfield)からgetfield()へのリンクを追加します。 – Steven

関連する問題