2013-12-10 7 views
13

में पहले से परिभाषित नहीं किया गया है, क्या एक चर को असाइन करने के लिए सरल जूलिया सिंटैक्स है यदि यह अपरिभाषित (या झूठा) है? मेरा मतलब रूबी के x ||= NEW_VALUE जैसा कुछ है। मैंने x || x=NEW_VALUE की कोशिश की है लेकिन यह एक त्रुटि फेंकता है। आसान वाक्यविन्यास को छोड़कर, यह जांचने के लिए कि मैं एक चर परिभाषित किया गया है, मैं किस फ़ंक्शन का उपयोग कर सकता हूं?केवल तभी निर्दिष्ट करें जब जूलिया

उत्तर

24

आप isdefined फ़ंक्शन का उपयोग कर सकते हैं: isdefined(:x) || (x = NEW_VALUE)

2

मैंने उस छोटी सी असुविधा से निपटने के लिए एक मैक्रो तैयार किया है।

macro ifund(exp) 
    local e = :($exp) 
    isdefined(e.args[1]) ? :($(e.args[1])) : :($(esc(exp)))  
end 
फिर आरईपीएल में

:

julia> z 
ERROR: UndefVarError: z not defined 

julia> @ifund z=1 
1 

julia> z 
1 

julia> z=10 
10 

julia> @ifund z=2 
10 

julia> z 
10 

प्रक्षेप का एक उदाहरण:

julia> w 
ERROR: UndefVarError: w not defined 

julia> w = "$(@ifund w="start:") end" 
"start: end" 

julia> w 
"start: end" 

लेकिन, गुंजाइश की याद (y के दायरे में है के लिए लूप):

julia> y 
ERROR: UndefVarError: y not defined 

julia> for i=1:10 y = "$(@ifund y="") $i" end 

julia> y 
ERROR: UndefVarError: y not defined 

चलो मुझे पता है कि यह काम करता है। मैं उत्सुक हूं, क्योंकि यह मैक्रोज़ के साथ मेरा पहला अभ्यास है।

संबंधित मुद्दे