一些隨機的發現:[只限於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