2016-02-16 8 views
6

Qual è l'equivalente di getthon di Python() in Julia? Ho provato il seguente codice di meta-programmazione, ma funziona solo nell'ambito globale, non nell'ambito di una funzione.Qual è l'equivalente di getattr() in Julia

type A 
    name 
    value 
end 

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

questo stampa:

Alex 
1 

Tuttavia, se quanto precede è all'interno di un insieme di funzioni, allora non funzionerà

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

tmp() 

L'errore è:

ERROR: LoadError: UndefVarError: a not defined 

MODIFICA: Grazie a tutti per aver risposto alla domanda. Ecco i link alla documentazione di Julia su getfield e setfield!.

risposta

10

Si desidera utilizzare 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

Siete alla ricerca per la funzione 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

Grazie! Aggiungerò il collegamento a getfield() dalla documentazione di Julia (http://docs.julialang.org/en/release-0.4/stdlib/base/?highlight=getfield#Base.getfield) – Steven