2011-09-26 15 views
8

मैं अपने आवेदन contoller में एक संरक्षित विधिक्या है = = मतलब?

def current_user 
    @current_user ||= User.find_by_id(session[:user_id]) 
end 

मैं क्या ||= साधन सोच रहा था है? मैं खोजने और खोजने का प्रयास कर रहा हूं, लेकिन इसका कोई फायदा नहीं हुआ।

+0

यह सुनिश्चित नहीं है कि नाम लागू होता है, लेकिन सी # में नल-कोलेसिंग ऑपरेटर कहा जाता है http://msdn.microsoft.com/en-us/library/ms173224.aspx – kenny

+0

मुझे मेरी मदद करने और मुझे रखने के लिए सभी को धन्यवाद सही दिशा में! – pka

+3

डुप्लिकेट: [रूबी में '|| =' का अर्थ क्या है?] (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/5230162/), [क्या रूबी ऑपरेटर '|| =' बुद्धिमान है?] (http://StackOverflow.Com/q/2989862/) और शायद कई अन्य भी। –

उत्तर

11

असल में, a ||= b का अर्थ है assign b to a if a is null or undefined or false (i.e. false-ish value in ruby), यह a = b unless a पर शॉर्टकट है।

+1

[रूबी प्रोग्रामिंग/सिंटेक्स/ऑपरेटर] पर भी सशर्त असाइनमेंट * देखें (http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Operators#1._Assignment)। – rdvdijk

+1

यह समझने के लिए महत्वपूर्ण है कि यह छोटा सर्किटिंग भी है - 'बी' नहीं चलाया जाएगा यदि ''' 'झूठा-आश' है (उदाहरण के लिए महंगी डीबी क्वेरी नहीं कर रहा समय)। –

+1

यह 'ए = बी नहीं है जब तक कि कोई नहीं। बेहतर समझने के लिए कि यह वास्तव में कैसे काम करता है, कृपया http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html देखें। – Sigurd

3

|| = एक रूबी मुहावरे है। इसका मतलब है कि अगर @current_user शून्य (या झूठा) है तो उसे आईडी द्वारा ढूंढने का प्रयास करें और इसे @current_user को असाइन करें, अन्यथा कुछ भी नहीं करें।

इन relatedquestions देखें।

3

यह रूबी का हिस्सा है।

हैं @current_user नहीं के बराबर या गलत है, यह करने के लिए User.find_by_id(session[:user_id])

0

सूचना समानताएं a += b, जो a = a + b के बराबर है के साथ स्थापित किया जाएगा।

तो a ||= ba = a || b के बराबर है। जैसा कि अन्य ने उल्लेख किया है, यह a = b unless a जैसा ही है।

+1

असल में, 'ए'' झूठी-आश' नहीं होने पर रूबी को असाइन नहीं करना चाहिए, ताकि 'a = a || बी 'कड़ाई से 'ए = बी के बराबर नहीं है जब तक कि कोई नहीं। उदाहरण के लिए 'ए'' हैश होने के मामले में कोई विशेष रूप से प्रभावों के बारे में सोच सकता है। – Romain

+0

नहीं, ऐसा नहीं है, जैसा कि एसओ पर पहले से ही कई बार चर्चा की गई है, रुबी मेलिंगलिस्ट पर दर्जनों बार और ब्लॉग पोस्ट के असंख्य रूप से सैकड़ों बार। –

+0

ओह, ठीक है। क्या आप मुझे एक उदाहरण दे सकते हैं जब यह मामला नहीं है? – grifaton

0

रूबी 'ए || = बी' में "या - बराबर" ऑपरेटर कहा जाता है। यह कहने का एक छोटा सा तरीका है कि क्या किसी के पास बूलियन मूल्य सत्य है (यदि यह न तो झूठा या शून्य है) तो इसका मूल्य है। यदि नहीं, तो इसका मूल्य बी है।

0

मूल रूप से, एक || = b एक करने के लिए ख आवंटित अर्थ है कि यदि एक अशक्त या अपरिभाषित या झूठी (अर्थात झूठी-ish माणिक में मूल्य) है, यह करने के लिए जब तक एक a = b एक शॉर्टकट है।

शेयर | -

arr = nil || [] 
arr0 ||= [] 

arr <=> arr0 *#=> 0* 

यह साधन दिए सितं, 26 '11 संपादित

इस उत्तर के अलावा 14:48

रोमेन 6,9711330 पर एक उदाहरण निर्धारण, यहाँ arr अभिव्यक्ति और arr0 अभिव्यक्ति बराबर हैं।

आशा है कि यह बेहतर ||= ऑपरेटर को समझने में मदद करता है।

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