【发布时间】:2012-08-30 12:30:47
【问题描述】:
我想强调的是,我正在寻找 实际 ||= 运算符由 Ruby 1.9.3 解释器扩展的方式,而不是 看起来 的扩展方式基于它的行为。我真正希望的是有人了解实际的解释器来源,遗憾的是我可能无法完成这项任务。我发现的唯一似乎可以检查此问题的资源已过时:“A short-circuit (||=) edge case”。
我上面提到的资源似乎表明 x ||= y 到 x = x || y 的“官方”扩展在 1.9 之前的解释器版本中要么不准确,要么存在错误。无论如何,所指示的边缘情况似乎已被平滑。上述资源声称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 扩展似乎是正确的。不过,重申一下我最初的观点,我真的很想看到一些真正权威的资源来解决这个问题,嗯,权威的,而不是像我(和其他人)所做的那样以传闻的方式。
【问题讨论】:
标签: ruby