我在MRI 2.0和jruby 1.7.16.1中都看到了以下行为:
irb(main):001:0> a
NameError: undefined local variable or method `a' for main:Object
from (irb):1
from /usr/bin/irb:12:in `<main>'
irb(main):002:0> a = 2 unless true
=> nil
irb(main):003:0> a
=> nil
irb(main):004:0>
我希望a
保持未定义,因为=
的优先级高于unless
。我错过了什么?
答案 0 :(得分:0)
a = 2 unless true
的评估如下:
unless true
a = 2
end
优先级不起作用,因为它的范围不同。
答案 1 :(得分:0)
a #=>NameError: undefined local variable or method `a' for main:Object
解析器无法确定这是否是局部变量OR METHOD,如错误所示。
a = 2 unless true
这里解析器能够识别出这是一个变量,并且它被定义(未初始化)。如果执行该语句,它将被初始化。未初始化的变量评估为零。