रूबी 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)।