अधिकांश _आईआरबी के अंतिम रिटर्न मूल्य के धारक के रूप में विशेष अर्थ से अवगत हैं , लेकिन ऐसा नहीं है जो मैं यहां पूछ रहा हूं।
इसके बजाय, मैं इसके बारे में पूछ रहा हूं _जब सादे-पुराने-रूबी-कोड में एक चर नाम के रूप में उपयोग किया जाता है। यहाँ यह विशेष व्यवहार करने के लिए प्रतीत होता है, "चर की परवाह नहीं" (एक ला प्रस्तावना ) के समान है। यहाँ कुछ उपयोगी उदाहरण हैं जो इसके अनूठे व्यवहार को दर्शाते हैं:
lambda { |x, x| 42 } # SyntaxError: duplicated argument name
lambda { |_, _| 42 }.call(4, 2) # => 42
lambda { |_, _| 42 }.call(_, _) # NameError: undefined local variable or method `_'
lambda { |_| _ + 1 }.call(42) # => 43
lambda { |_, _| _ }.call(4, 2) # 1.8.7: => 2
# 1.9.3: => 4
_ = 42
_ * 100 # => 4200
_, _ = 4, 2; _ # => 2
ये सभी सीधे रूबी (साथ) में चलाए जा रहे थे puts एस में जोड़े गए) -नहीं IRB- अपनी अतिरिक्त कार्यक्षमता के साथ विवाद से बचने के लिए।
हालांकि यह मेरे अपने प्रयोग का एक परिणाम है, क्योंकि मुझे इस व्यवहार पर कहीं भी कोई प्रलेखन नहीं मिल रहा है (मूलतः यह खोज करने के लिए सबसे आसान बात नहीं है)। अंत में, मैं उत्सुक हूं कि यह सब आंतरिक रूप से कैसे काम करता है ताकि मैं ठीक से समझ सकूं कि इसमें क्या खास है _। इसलिए मैं प्रलेखन के संदर्भों के लिए पूछ रहा हूं, और, अधिमानतः, रूबी स्रोत कोड (और शायद रूबीस्पेक ) जो यह बताता है कि कैसे_ करता है कि रूबी व्यवहार करता है।
नोट: इस चर्चा के अधिकांश @ निक्लास बी के साथ सामने आए।
lambda { |_, _| _ }.call(4, 2)1.8 और 1.9 के बीच के व्यवहार में अंतर सिर्फ एक अनजाने में साइड-इफ़ेक्ट है? "सामान्य" परिस्थितियों में जहां चर नाम को उस क्रम में दोहराया नहीं जा सकता, जिसमें वे असाइन किए गए हैं, असंगत है।