जवाबों:
andके रूप में ही है, &&लेकिन कम पूर्वता के साथ । वे दोनों शॉर्ट-सर्किट मूल्यांकन का उपयोग करते हैं ।
चेतावनी: andयहाँ तक कि =आप आमतौर पर बचना चाहते हैं की तुलना में कम पूर्वता है and। एक उदाहरण जब andउपयोग किया जाना चाहिए, तो " डबल रेंडर एरर्स से बचना " के तहत रेल गाइड में पाया जा सकता है ।
&&, जबकि andइसका उपयोग केवल बहुत विशिष्ट मामलों के लिए किया जाना चाहिए।
andउलटा ifबयान संशोधक के रूप में है : next if widget = widgets.popबन जाता है widget = widgets.pop and next। यह डालने का एक शानदार तरीका है, वास्तव में इसे मेरे सिर में" क्लिक करें "। (और orएक उलट unlessसंशोधक की तरह है ।)
व्यावहारिक अंतर बाध्यकारी शक्ति है, जो अजीब व्यवहार को जन्म दे सकता है यदि आप इसके लिए तैयार नहीं हैं:
foo = :foo
bar = nil
a = foo and bar
# => nil
a
# => :foo
a = foo && bar
# => nil
a
# => nil
a = (foo and bar)
# => nil
a
# => nil
(a = foo) && bar
# => nil
a
# => :foo
वही काम करता है ||और or।
a = foo and bar और (a = foo ) && bar साबित होता है कि andपहले की तुलना में कम है &&।
a = foo and barके बराबर है (a = :foo) and nil। चूंकि असाइनमेंट तार्किक रूप से सही मान देता है ( :foo) तब दूसरा भाग मूल्यांकन करता है, जो विफल रहता है, वापस लौटता है nil।
रूबी स्टाइल गाइड बेहतर कहते हैं की तुलना में मैं कर सकता:
का उपयोग करें && / || बूलियन अभिव्यक्तियों के लिए, और / या नियंत्रण प्रवाह के लिए। (अंगूठे का नियम: यदि आपको बाहरी कोष्ठक का उपयोग करना है, तो आप गलत ऑपरेटरों का उपयोग कर रहे हैं।)
# boolean expression
if some_condition && some_other_condition
do_something
end
# control flow
document.saved? or document.save!
and/ orपूरी तरह से कहता है , और उनके पास एक बिंदु हो सकता है। अक्सर नियंत्रण प्रवाह में उनका उपयोग अधिक स्पष्ट रूप से if/ unlessऑपरेटरों के साथ लिखा जा सकता है (उदाहरण के लिए document.save! unless document.saved?)
||और &&आप प्रोग्रामिंग भाषाओं में बूलियन ऑपरेटरों से जो अपेक्षा करते हैं, उसके साथ बाँधें ( &&बहुत मजबूत है, ||थोड़ा कम मजबूत है)।
andऔर orकम पूर्वता है।
उदाहरण के लिए, इसके विपरीत ||, orइसकी निम्न पूर्वता है =:
> a = false || true
=> true
> a
=> true
> a = false or true
=> true
> a
=> false
इसी तरह, इसके विपरीत &&, andइसकी पूर्ववर्ती स्थिति भी निम्न है =:
> a = true && false
=> false
> a
=> false
> a = true and false
=> false
> a
=> true
क्या अधिक है, इसके विपरीत &&और ||, andऔर orसमान पूर्वता के साथ बाँधते हैं:
> !puts(1) || !puts(2) && !puts(3)
1
=> true
> !puts(1) or !puts(2) and !puts(3)
1
3
=> true
> !puts(1) or (!puts(2) and !puts(3))
1
=> true
कमजोर-बाध्यकारी andऔर orनियंत्रण-प्रवाह उद्देश्यों के लिए उपयोगी हो सकता है: http://devblog.avdi.org/2010/08/02/use-and-and-or-in-ruby/ देखें ।
||, orपहले की तुलना में कम है =..." अब यह अधिक समझ में आता है, धन्यवाद!
andकी तुलना में कम पूर्वता है &&।
लेकिन एक अनसुना उपयोगकर्ता के लिए, समस्याएँ हो सकती हैं यदि इसका उपयोग अन्य ऑपरेटरों के साथ किया जाता है जिनकी मिसाल बीच में हो, उदाहरण के लिए, असाइनमेंट ऑपरेटर:
def happy?() true; end
def know_it?() true; end
todo = happy? && know_it? ? "Clap your hands" : "Do Nothing"
todo
# => "Clap your hands"
todo = happy? and know_it? ? "Clap your hands" : "Do Nothing"
todo
# => true
andइसकी पूर्वता कम होती है, ज्यादातर हम इसे नियंत्रण-प्रवाह संशोधक के रूप में उपयोग करते हैं if:
next if widget = widgets.pop
हो जाता है
widget = widgets.pop and next
के लिए or:
raise "Not ready!" unless ready_to_rock?
हो जाता है
ready_to_rock? or raise "Not ready!"
मैं उपयोग करना पसंद करता हूं , ifलेकिन अधिक समझदार नहीं है, इसलिए मैं सिर्फ उपेक्षा करता हूं और ।andifandor
अधिक जानकारी के लिए " का उपयोग करना" और "और" या "रूबी में " देखें।
मुझे नहीं पता कि यह रूबी का इरादा है या अगर यह बग है लेकिन नीचे इस कोड को आज़माएं। यह कोड रूबी संस्करण 2.5.1 पर चलाया गया था और यह एक लिनक्स सिस्टम पर था।
puts 1 > -1 and 257 < 256
# => false
puts 1 > -1 && 257 < 256
# => true
or||भी देखें ।