2016-04-27 26 views
2

由於ruby 2.3.0,你可以調用[]=方法nil。我不明白這種方法的目的。[] =方法的目的是什麼

例如:

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

[]方法不存在:

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

紅寶石2.3.0 changelog沒有提到的變化,雖然看上去接近安全導航操作。

該操作符的用途是什麼?

+0

你跑哪建立紅寶石的?你使用什麼操作系統?你是如何安裝Ruby 2.3.0的?這是新鮮的安裝還是安裝了額外的寶石? – spickermann

回答

0

該方法isn't documented in Ruby 2.3.0我無法在Ruby 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中被完全刪除,我猜這種方法或這種行爲是偶然添加的。

更新:卡里Swoveland在comment on another question指出,這種行爲是一個錯誤,並固定在以後的版本(參見:https://bugs.ruby-lang.org/issues/11976)。

相關問題