2016-02-16 14 views
6

में 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 

संपादित करें: प्रश्न का उत्तर देने के लिए सभी को धन्यवाद। जूलिया के दस्तावेज के लिंक यहां getfield और setfield! पर दिए गए हैं।

उत्तर

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

धन्यवाद! मैं जूलिया दस्तावेज (http://docs.julialang.org/en/release-0.4/stdlib/base/?highlight=getfield#Base.getfield) से गेटफील्ड() में लिंक जोड़ूंगा – Steven