Some random findings: [only in Ruby 2.3.0p0]
The method doesn't seem to exist:
nil.method(:[]=) #=> NameError: undefined method `[]='
nil.respond_to?(:[]=) #=> false
And you can't invoke it using send
:
nil.send(:[]=) #=> NoMethodError: undefined method `[]='
Ruby evaluates neither the right hand side, nor the argument, i.e.
nil[foo]=bar
doesn't raise a NameError
, although foo
and bar
are undefined.
The expression seems to be equivalent to nil
:
$ ruby --dump=insns -e 'nil[foo]=bar'
== disasm: #<ISeq:<main>@-e>============================================
0000 trace 1 ( 1)
0002 putnil
0003 leave
$ ruby --dump=insns -e 'nil'
== disasm: #<ISeq:<main>@-e>============================================
0000 trace 1 ( 1)
0002 putnil
0003 leave
@idx = Hash.new
that I was trying to use as@index[key] = value
. The unittest was failing in strange ways because the assignment didn't fail on thenil
value. – Milkwhite