2011-03-08 10 views
8

संभव डुप्लिकेट:
What does ||= mean in Ruby?रुबी भाषा में || = मतलब क्या है?

नीचे लाइन क्या मतलब है?

a ||= {} 
a ||= 1 

irb में यह हमेशा उपरोक्त दोनों पंक्तियों के लिए हैश के रूप में एक वर्ग को वापस देता है। अग्रिम धन्यवाद।

+0

@mladen सच है, लेकिन व्यक्तिगत रूप से मैं अन्य प्रश्न को बंद करने के लिए वोट दूंगा इस के पक्ष में। शीर्ष रेटेड उत्तर में इस में अधिक अद्यतित/सही जानकारी है। –

+0

डुप्लिकेट: [रुबी में '|| =' का अर्थ क्या है?] (Http://StackOverflow.Com/q/995593/), [रूबी में '|| =' का मतलब क्या है?] (Http: // StackOverflow कॉम/क्यू/3800 9 577 /), [रूबी में '|| =' क्या है?] (Http://StackOverflow.Com/q/3945711/), [रुबी वैरिएबल असाइनमेंट में डबल पाइप सिंबल?] (Http://StackOverflow.Com/q/4500375/), ["' || = '" ऑपरेटिंग रूबी में खड़ा है] (http://StackOverflow.Com/q/5124930/), [रूबी ऑपरेटर 'है। | = 'बुद्धिमान?] (http://StackOverflow.Com/q/2989862/) और शायद कई अन्य भी। –

+0

यह भी देखें ['|| =' (या समान) धागे और पृष्ठों की निश्चित सूची] (http://Ruby-Forum.Com/topic/151660/)। [रूबी में '|| =' का अर्थ क्या है?] (Http://StackOverflow.Com/q/995593/) और [रूबी में '|| =' का अर्थ क्या है?] (Http: // StackOverflow।कॉम/क्यू/3800 9 577 /) * संबंधित प्रश्न * के अंतर्गत भी जुड़े हुए हैं। –

उत्तर

0

इसका मतलब है

a = a || {} 

अर्थात

a = {} unless a 
+1

बिल्कुल नहीं। यदि कोई झूठा है तो यह {} को भी सेट करेगा। – Dogbert

+0

हां, मैंने अभी देखा है कि, धन्यवाद ;-) –

+0

और यदि यह सच है तो यह असाइन नहीं करेगा। – Romain

16

||= एक असाइनमेंट ऑपरेटर, जो सौंपा मान देता है। a ||= b कथन a || a = b के समतुल्य है जिसका अर्थ है कि यदि a सेट है और उसके पास कुछ वास्तविक मान है, तो यह वही रहता है, अन्यथा यह b का मान लेता है।

आपके उदाहरण में a केवल एक बार सेट है, जो आपके द्वारा देखी गई व्यवहार को समझाता है।

a ||= {} 
a ||= 1 // a is still {} 

विशिष्ट उपयोग मैंने देखा है स्थिर चर, यानी शुरू करना है।

class Foo 
    def self.bar 
     return @bar ||= {} 
    end 
end 

संपादित करें:

यह उल्लेख भालू कि ||= एक शॉर्ट सर्किट ऑपरेटर है। इसका मतलब यह है कि a ||= b के मामले में केवल a = b का असाइनमेंट होगा। a गैर-झूठी स्थिति में a = a का असाइनमेंट कभी नहीं होगा। यह थोड़ा सा पैडेंटिक है, लेकिन कुछ (बहुत) किनारे के मामलों में मायने रखता है।

अधिक जानकारी के लिए, read the definitive list of ||= threads and pages

+0

आपका उदाहरण एक आवृत्ति चर है, स्थिर (या वर्ग) चर नहीं। वह '@@ कुछ होगा '। [अभी भी सबसे अच्छा जवाब :)] –

+0

@ सिमोन बस एक ही चीज़ को देखा। अब फिक्स्ड (हालांकि, बिल्कुल आपका रास्ता नहीं)। –

+0

इसे अक्सर हेशेस में सामान-चेक-इन करने के लिए भी उपयोग किया जाता है (à-la: 'हैश [कुंजी] || = प्रारंभिक_वैल्यू ', विशेष रूप से यदि आप आगे क्या करना चाहते हैं तो हैश [कुंजी] + = मान' है, जो होगा त्रुटि है अगर 'हैश [कुंजी] .nil?' सत्य-ish है)। – Romain

0

आप इस तरह "ए || = {}" पढ़ सकते हैं। यदि "ए" परिभाषित किया गया है, तो दाईं ओर अभिव्यक्ति को अनदेखा करें। अन्यथा, "ए" सेट करें, दाईं तरफ अभिव्यक्ति के बराबर है। पहली पंक्ति में, "ए" शायद अपरिभाषित है ताकि रेखा दाईं ओर अभिव्यक्ति के लिए "ए" सेट करे जो खाली हैश है। दूसरी पंक्ति पर, "ए" पहले से ही एक {} के रूप में सेट है, इसलिए यह दाईं ओर अभिव्यक्ति को अनदेखा कर रहा है जिसका मूल्य 1.

+0

यह जांच नहीं कर रहा है कि परिभाषित किया गया है या नहीं, बल्कि यह जांचता है कि कोई सत्य है (उदा। न तो झूठी नील) या नहीं। – Romain

+0

अच्छा, अधिक सटीक होने के लिए ... यह जांच रहा है कि "ए" झूठी, शून्य, या निहित है और तदनुसार "ए" असाइन करता है! – RubyFanatic

+0

सही, निहित सत्य नहीं है- यह सच है :) – Romain

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