जवाबों:
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
लेकिन अधिक समझदार नहीं है, इसलिए मैं सिर्फ उपेक्षा करता हूं और ।and
if
and
or
अधिक जानकारी के लिए " का उपयोग करना" और "और" या "रूबी में " देखें।
मुझे नहीं पता कि यह रूबी का इरादा है या अगर यह बग है लेकिन नीचे इस कोड को आज़माएं। यह कोड रूबी संस्करण 2.5.1 पर चलाया गया था और यह एक लिनक्स सिस्टम पर था।
puts 1 > -1 and 257 < 256
# => false
puts 1 > -1 && 257 < 256
# => true
or
||
भी देखें ।