||= 在 Ruby 中是啥意思? [复制]
Posted
技术标签:
【中文标题】||= 在 Ruby 中是啥意思? [复制]【英文标题】:What does ||= mean in Ruby? [duplicate]||= 在 Ruby 中是什么意思? [复制] 【发布时间】:2011-04-17 14:08:09 【问题描述】:可能重复:What does ||= mean in Ruby?
||=
在 Ruby 中是什么意思?
【问题讨论】:
该死,我搜索的时候找不到任何东西。 【参考方案1】:它主要用作将变量初始化为某个值(如果尚未设置)的简写形式。
将语句视为返回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 为假的情况)。
Jorg W Mittag 认为这是不正确的,在 his answer 中重复的问题。
这是错误的。请阅读Ruby-Forum.Com/topic/151660 以及其中提供的链接。
@Jörg 等人,我已经更新了我的答案。【参考方案2】:
x ||= y
经常被用来代替x = y if x == nil
【讨论】:
【参考方案3】:这个想法与其他类似的运算符(+=
、*=
等)相同:a ||= b
是a = a || b
而且这个技巧不仅限于 Ruby:它适用于许多具有 C 根的语言。
编辑以击退反对者。 请参阅 Jörg 的链接之一以获得更准确的近似值,例如 this one。 这正是我不喜欢 Ruby 的原因:一切都不是它看起来的样子。
【讨论】:
值得注意的是,不是 C 或 C++ 或 Java。 @TokenMacGuy 我的意思是一般的“技巧”:从 'a = a @ b' 生成 'a @= b'。 这是错误的。请阅读Ruby-Forum.Com/topic/151660 以及其中提供的链接。以上是关于||= 在 Ruby 中是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
波浪号大于 (~>) 在 Ruby gem 依赖项中是啥意思? [复制]