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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…