2016-02-16 12 views
6

Julia Python'un getattr() eşdeğeri nedir? Aşağıdaki meta programlama kodunu denedim, ancak sadece bir kapsam dahilinde değil, global kapsamda çalışır.Julia cinsinden getattr() nedir

type A 
    name 
    value 
end 

a = A("Alex",1) 
for field in fieldnames(a) 
    println(eval(:(a.$field))) 
end 

Bu yazdıracaktır:

:

Alex 
1 

Ancak, yukarıda bir işlevin etki alanında ise, o zaman hatadır

function tmp() 
    a = A("Alex",1) 
    for field in fieldnames(a) 
    println(eval(:(a.$field))) 
    end 
end 

tmp() 

çalışmayacak

ERROR: LoadError: UndefVarError: a not defined 

DÜZENLEME: Soruya cevap veren herkese teşekkürler. İşte Julia'nın belgelerine getfield ve setfield! arasındaki bağlantılar.

cevap

10

getfield kullanmak istiyorsunuz.

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

Sen getfield fonksiyonu arıyoruz:

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

teşekkür ederiz! Julia dokümantasyonundan getfield() 'a bağlantı ekleyeceğim (http://docs.julialang.org/en/release-0.4/stdlib/base/?highlight=getfield#Base.getfield) – Steven