/ / शून्य [डुप्लिकेट] - रूबी पर [] = विधि का उद्देश्य क्या है

शून्य [डुप्लिकेट] - रूबी पर [] = विधि का उद्देश्य क्या है

रूबी 2.3.0 के बाद से, आप कॉल कर सकते हैं []= विधि पर nil। मैं इस विधि के उद्देश्य को समझ नहीं पा रहा हूं।

उदाहरण के लिए:

nil[1] = 1
# or
nil["foo"] = "bar"

परंतु [] विधि मौजूद नहीं है:

nil[1]
# => NoMethodError: undefined method `[]" for nil:NilClass

रूबी 2.3.0 चेंजलॉग परिवर्तनों का उल्लेख नहीं करता है, हालांकि यह सुरक्षित नेविगेशन ऑपरेटर के करीब लगता है।

इस ऑपरेटर का उद्देश्य क्या है?

उत्तर:

जवाब के लिए 0 № 1

यह वास्तव में 2.3.0 में एक बग प्रतीत होता है - https://bugs.ruby-lang.org/issues/11976

यह तर्कों का मूल्यांकन नहीं करता है:

nil[undefined_index_variable] = raise "Fooo!" # => nil

जवाब के लिए 0 № 2

वह विधि रूबी में दस्तावेज नहीं है 2.3.0 और मैं रूबी में इस व्यवहार को पुन: उत्पन्न नहीं कर सकता 2.3.1 (दोनों उदाहरण उठाओ NoMethodError: undefined method "[]=" for nil:NilClass)।

इसके अलावा मैंने पुनः स्थापित किया 2.3.0 और केवल आपके उदाहरणों को पुन: पेश करने में आंशिक रूप से सक्षम था:

$ rbenv install 2.3.0
Downloading ruby-2.3.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2
Installing ruby-2.3.0...
Installed ruby-2.3.0 to /Users/spickermann/.rbenv/versions/2.3.0

$ rbenv shell 2.3.0

$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]

$ irb
irb   > RUBY_VERSION
irb  => "2.3.0"
irb   > nil[1] = 1
irb  => nil
irb   > nil["foo"] = "bar"
NoMethodError: undefined method `[]=" for nil:NilClass
from (irb):3
from /Users/spickermann/.rbenv/versions/2.3.0/bin/irb:11:in `<main>"

ऐसा लगता है NilClass#[]= रुबी में ठीक से काम नहीं करता है 2.3.0। चूंकि इसे पूरी तरह से हटा दिया गया था 2.3.1, मुझे लगता है कि इस विधि या इस व्यवहार को दुर्घटना से जोड़ा गया था।

अद्यतन करें: कैरी स्विवलैंड ने एक में बताया एक और सवाल पर टिप्पणी करें कि यह व्यवहार एक बग था और बाद के संस्करणों में तय किया गया था (देखें: https://bugs.ruby-lang.org/issues/11976)।