एक ताजा शुरू कर दिया सत्र से निम्नलिखित आईआरबी टुकड़ा पर विचार करें:का अजीब अर्थ || और || = रूबी में (2.0, 1.9.3, JRuby 1.7.4)
irb:01> baz # => NameError, baz is not defined
irb:02> baz || baz = 0 # => NameError, baz is not defined
irb:03> baz # => nil
baz
एक अपरिभाषित चर और यह उत्पादन का मूल्यांकन करने की कोशिश कर रहा था एक NameError
। फिर भी, किसी भी तरह, इस ऑपरेशन के बाद, baz
परिभाषित किया गया था, और इसका मूल्य nil
है। मान लीजिए, मान nil
वैरिएबल baz
को असाइन किया गया था, भले ही कोई भी (स्पष्ट रूप से) इसके लिए नहीं पूछा गया हो। क्या कोई अंतर्निहित भाषा कारण है कि यह व्यवहार वांछनीय है?
क्या नियम है कि इस व्यवहार और इस तरह के अन्य इसी भ्रामक निर्माणों, बताते है:
irb:04> true if foo # => NameError
irb:05> foo # => NameError; name still undefined
irb:06> foo = (true if foo) # => nil
irb:07> foo # => nil; name defined as nil
irb:08> true || i = 0 || j = 2 # => i and j are nil; || appears nonlazy
irb:09> raise || quux = 1 # => RuntimeError, quux is nil
आप वास्तव में अपने किसी भी उदाहरण में '|| =' का उपयोग नहीं कर रहे हैं, प्रश्न शीर्षक थोड़ा भ्रामक है – nzifnab
और भी अजीब बात: 'स्पैम # => नाम त्रुटि; >> स्पैम || = "अंडे" # => "अंडे"; >> स्पैम # => "अंडे" '। असंगत। – iamnotmaynard
संभावित डुप्लिकेट [फॉरेसी के अंदर असाइनमेंट ऑपरेशन के साथ भ्रम \ "अगर \' ब्लॉक] (http://stackoverflow.com/questions/15183576/confusion-with-the-assignment-operation-ins-the-fallacy-if -ब्लॉक) –