由於ruby 2.3.0,你可以調用[]=
方法nil
。我不明白這種方法的目的。[] =方法的目的是什麼
例如:
nil[1] = 1
# or
nil['foo'] = 'bar'
但[]
方法不存在:
nil[1]
# => NoMethodError: undefined method `[]' for nil:NilClass
紅寶石2.3.0 changelog沒有提到的變化,雖然看上去接近安全導航操作。
該操作符的用途是什麼?
由於ruby 2.3.0,你可以調用[]=
方法nil
。我不明白這種方法的目的。[] =方法的目的是什麼
例如:
nil[1] = 1
# or
nil['foo'] = 'bar'
但[]
方法不存在:
nil[1]
# => NoMethodError: undefined method `[]' for nil:NilClass
紅寶石2.3.0 changelog沒有提到的變化,雖然看上去接近安全導航操作。
該操作符的用途是什麼?
該方法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)。
這似乎是居然在2.3.0中的錯誤 - https://bugs.ruby-lang.org/issues/11976
它不評估參數:
nil[undefined_index_variable] = raise "Fooo!" # => nil
你跑哪建立紅寶石的?你使用什麼操作系統?你是如何安裝Ruby 2.3.0的?這是新鮮的安裝還是安裝了額外的寶石? – spickermann