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)。