一些随机的发现:[只限于Ruby 2.3.0p0]
的方法似乎并不存在:
nil.method(:[]=) #=> NameError: undefined method `[]='
nil.respond_to?(:[]=) #=> false
而且使用send
你不能调用它:
nil.send(:[]=) #=> NoMethodError: undefined method `[]='
红宝石评估既不右手边,也没有说法,即
nil[foo]=bar
不会产生NameError
,虽然foo
和bar
未定义。
表达似乎等同于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
无法在红宝石2.2.4重现。也许在你的版本中有一个新功能或一个错误? –
奇怪......也许这是一个错误。 –
我只能在Ruby 2.3.0中重现这一点,我会假定它是一个错误。检查这个问题的bug跟踪器可能是值得的(https://bugs.ruby-lang.org)。 – tadman