从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没有提及这些变化,尽管它似乎与安全导航操作员很接近。
此运营商的目的是什么?
答案 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)