我想强调我正在寻找Ruby 1.9.3解释器展开
上面提到的资源似乎表明,在1.9之前的解释器版本中,“官方”的
||=
运算符的实际方式,而不是基于其行为看起来如何展开。我真正希望的是能够深入理解实际解释器源代码的人,这是一项我可能无法胜任的任务。我找到的唯一一个似乎涉及这个问题的资源已经过时了:“A short-circuit (||=) edge case”。上面提到的资源似乎表明,在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
的展开似乎是正确的。然而,重申我的原始观点,我真的很希望看到一些真正权威的来源来权威地解决这个问题,而不是像我(和其他人)所做的那样凭经验判断。