nil = =方法的目的是什么

从ruby 2.3.0开始,你可以在nil上调用[]=方法。 我不明白这种方法的目的。

例如:

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

但是[]方法不存在:

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

ruby 2.3.0更改日志没有提到这些更改,尽管它似乎接近安全导航操作员。

这个运营商的目的是什么?

这似乎实际上是2.3.0中的一个错误 – https://bugs.ruby-lang.org/issues/11976

它没有评估参数:

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

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 `
'

似乎NilClass#[]=在Ruby 2.3.0中无法正常工作。 由于它在2.3.1被完全删除,我猜这个方法或这种行为是偶然添加的。

更新 :Cary Swoveland 在另一个问题的评论中指出这个行为是一个错误,并在以后的版本中得到修复(参见: https ://bugs.ruby-lang.org/issues/11976)。