/ / Яка мета [] = метод на nil [дублікат] - ruby

Яка мета [] = методу на нуль [дублікат] - рубій

Оскільки рубін 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)