/ / Rubyでは、なぜnil [1] = 1がnilと評価されるのですか? - ルビー、null、ルビー-2.3

Rubyでは、なぜnil [1] = 1はゼロに評価されますか? - ruby​​、null、ruby-2.3

例えば:

nil[1]     #=> NoMethodError
nil[1]=1   #=> nil

変数でも起こるので、これは単なる構文ではありません。

a = nil
a[1]       #=> NoMethodError
a[1]=1     #=> nil

奇妙なことに:

nil.method(:[]=)   #=> NameError
[].method(:[]=)    #=> #<Method...>

Ruby 2.3.0p0

回答:

回答№1は1

ランダムな発見 [Ruby 2.3.0p0のみ]

メソッドが存在していないようです。

nil.method(:[]=)      #=> NameError: undefined method `[]="
nil.respond_to?(:[]=) #=> false

そして、あなたはそれを使ってそれを呼び出すことはできません send

nil.send(:[]=)        #=> NoMethodError: undefined method `[]="

Rubyは右辺も引数も評価しない。

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