gpt4 book ai didi

ruby - ||= 条件赋值运算符的官方扩展

转载 作者:数据小太阳 更新时间:2023-10-29 07:06:46 26 4
gpt4 key购买 nike

我想强调的是,我正在寻找 ||= 运算符被 Ruby 1.9.3 解释器扩展的实际方式,而不是它出现的方式 根据其行为进行扩展。我真正希望的是能够理解实际解释器源代码的人,遗憾的是我可能无法胜任这项任务。我发现似乎可以检查此问题的唯一资源已过时:“A short-circuit (||=) edge case ”。

我上面提到的资源似乎暗示 x ||= yx = x || 的“官方”扩展y 在 1.9 之前的解释器版本中要么不准确要么有错误。无论如何,指示的边缘情况似乎已被消除。上面的资源声称 x || x = yx 或 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 扩展似乎 是正确的。然而,重申一下我原来的观点,我真的很想看到一些真正权威的来源解决这个问题,好吧,权威性的而不是像我(和其他人)所做的那样。

最佳答案

x ||= y

的简写形式
x || x = y

如果x 不是nil 并且x 不是false,赋值将会发生,因为|| 运算符的短路评估。

关于ruby - ||= 条件赋值运算符的官方扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12287341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com