nil上[] =方法的目的是什么?

时间:2016-04-27 15:27:41

标签: ruby

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

例如:

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

[]方法不存在:

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

ruby​​ 2.3.0 changelog没有提及这些变化,尽管它似乎与安全导航操作员很接近。

此运营商的目的是什么?

2 个答案:

答案 0 :(得分: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#[]=在Ruby 2.3.0中无法正常工作。由于它已在2.3.1中完全删除,我猜这种方法或此行为是偶然添加的。

更新:Cary Swoveland在comment on another question中指出此行为是一个错误,并在以后的版本中得到修复(请参阅:https://bugs.ruby-lang.org/issues/11976)。

答案 1 :(得分:0)

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

它没有评估参数:

data(0)