我想强调一下,我正在寻找 Ruby 1.9.3 解释器扩展运算符的实际方式,而不是根据其行为扩展它的方式。我真正希望的是有人了解实际的解释器来源,遗憾的是我可能无法完成这项任务。我发现的唯一可以检查这个问题的资源已经过时了:“ A short-circuit (||=) edge case ”。||=
我上面提到的资源似乎表明 to 的“官方”扩展在 1.9 之前的解释x ||= y
器x = x || y
版本中要么不准确,要么存在错误。无论如何,所指示的边缘情况似乎已被平滑。上述资源声称x || x = y
或x or x = y
“更准确”。然而,这些都不正确,因为它们在x
以前未声明的全局变量时不起作用:
[11:04:18][****@asha:~]$ irb
1.9.3-p194 :001 > a || a = 3
NameError: undefined local variable or method `a' for main:Object
1.9.3-p194 :002 > b or b = 3
NameError: undefined local variable or method `b' for main:Object
1.9.3-p194 :003 > c = c || 3
=> 3
因此,就这些示例而言,至少在 1.9.3 中,x = x || y
扩展似乎是正确的。但是,为了重申我的原始观点,我真的很希望看到一些真正权威的来源解决这个问题,好吧,权威而不是像我(和其他人)所做的那样轶事。