lar*_*sch 9 ruby null ruby-2.3
例如:
nil[1] #=> NoMethodError
nil[1]=1 #=> nil
Run Code Online (Sandbox Code Playgroud)
这不仅仅是语法,因为变量也是如此:
a = nil
a[1] #=> NoMethodError
a[1]=1 #=> nil
Run Code Online (Sandbox Code Playgroud)
奇怪:
nil.method(:[]=) #=> NameError
[].method(:[]=) #=> #<Method...>
Run Code Online (Sandbox Code Playgroud)
Ruby 2.3.0p0
一些随机发现:[仅在 Ruby 2.3.0p0 中]
该方法似乎不存在:
nil.method(:[]=) #=> NameError: undefined method `[]='
nil.respond_to?(:[]=) #=> false
Run Code Online (Sandbox Code Playgroud)
并且您不能使用以下方式调用它send:
nil.send(:[]=) #=> NoMethodError: undefined method `[]='
Run Code Online (Sandbox Code Playgroud)
Ruby 既不计算右侧,也不计算参数,即
nil[foo]=bar
Run Code Online (Sandbox Code Playgroud)
不会引发 a 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
Run Code Online (Sandbox Code Playgroud)