Оскільки рубін 2.3.0, ви можете зателефонувати []=
метод на nil
. Я не розумію мету цього методу.
Наприклад:
nil[1] = 1
# or
nil["foo"] = "bar"
але []
метод не існує:
nil[1]
# => NoMethodError: undefined method `[]" for nil:NilClass
Рубін 2.3.0 журнал змін не згадує про ці зміни, хоча це здається близьким до оператора безпечної навігації.
Яке призначення цього оператора?
Відповіді:
0 для відповіді № 1Здається, це насправді помилка в 2.3.0 - https://bugs.ruby-lang.org/issues/11976
Він не оцінює аргументи:
nil[undefined_index_variable] = raise "Fooo!" # => nil
0 для відповіді № 2
Цей метод не задокументовано в Рубі 2.3.0
і я не можу відтворити цю поведінку в Рубі 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
, Я здогадуюсь, що цей метод чи така поведінка були додані випадково.
Оновити: Кері Своуленд зазначив у прокоментуйте інше питання що така поведінка була помилкою та була виправлена в пізніших версіях (див.: https://bugs.ruby-lang.org/issues/11976)