例えば:
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