【发布时间】:2011-04-17 14:08:09
【问题描述】:
【问题讨论】:
-
该死,我搜索的时候找不到任何东西。
标签: ruby
【问题讨论】:
标签: ruby
它主要用作将变量初始化为某个值(如果尚未设置)的简写形式。
将语句视为返回x || (x = y)。如果x 有一个值(false 除外),则仅评估|| 的左侧(因为|| 短路),x 将是不会被重新分配。但是,如果x 是false 或nil,则会计算右侧,将x 设置为y,并返回y(赋值语句的结果是正确的) -手边)。
更多讨论请见http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case。
【讨论】:
x ||= y 的行为类似于 x = y unless x (如果我们假设 x 和 y 代表任意表达式而不一定是变量)不与 x = x || y 相同(考虑x = x 不是空操作的情况)或x = y if x.nil?(考虑x 为假的情况)。
x ||= y 经常被用来代替x = y if x == nil
【讨论】:
这个想法与其他类似的运算符(+=、*= 等)相同:a ||= b 是a = a || b
而且这个技巧不仅限于 Ruby:它适用于许多具有 C 根的语言。
编辑以击退反对者。
请参阅 Jörg 的链接之一以获得更准确的近似值,例如 this one。
这正是我不喜欢 Ruby 的原因:一切都不是它看起来的样子。
【讨论】: