【问题标题】:What does ||= mean in Ruby? [duplicate]||= 在 Ruby 中是什么意思? [复制]
【发布时间】:2011-04-17 14:08:09
【问题描述】:

可能重复:
What does ||= mean in Ruby?

||= 在 Ruby 中是什么意思?

【问题讨论】:

  • 该死,我搜索的时候找不到任何东西。

标签: ruby


【解决方案1】:

它主要用作将变量初始化为某个值(如果尚未设置)的简写形式。

将语句视为返回x || (x = y)。如果x 有一个值(false 除外),则仅评估|| 的左侧(因为|| 短路),x 将是不会被重新分配。但是,如果xfalsenil,则会计算右侧,将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 ||= ba = a || b

    而且这个技巧不仅限于 Ruby:它适用于许多具有 C 根的语言。

    编辑以击退反对者。
    请参阅 Jörg 的链接之一以获得更准确的近似值,例如 this one
    这正是我不喜欢 Ruby 的原因:一切都不是它看起来的样子。

    【讨论】:

    • 值得注意的是,不是 C 或 C++ 或 Java。
    • @TokenMacGuy 我的意思是一般的“技巧”:从 'a = a @ b' 生成 'a @= b'。
    • 这是错误的。请阅读Ruby-Forum.Com/topic/151660 以及其中提供的链接。
    猜你喜欢
    • 2023-03-15
    • 2014-04-09
    • 2011-07-27
    • 2014-11-07
    • 2011-07-10
    • 2016-08-17
    • 2020-10-27
    • 2015-07-15
    • 2018-07-17
    相关资源
    最近更新 更多