【问题标题】:What does the "||=" operand stand for in ruby [duplicate]红宝石中的“||=”操作数代表什么[重复]
【发布时间】:2011-07-04 17:45:51
【问题描述】:

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

我是这样测试的:

>> a||=3
=> 3
>> a
=> 3
>> a||=b
=> 3
>> b
NameError: undefined local variable or method `b' for main:Object
    from (irb):11

【问题讨论】:

标签: ruby


【解决方案1】:

它是逻辑或运算的简写。相当于:

a || a = b

注意:以上代码示例已更正,以反映扩展 a ||= b 时的真实(如果不直观)行为。感谢那些为我指出这一点的人。 Here is the source

如果a 评估为真,它将保持原样,否则b 将分配给a。在 ruby​​ 中,nil 的计算结果为 false,因此您可以看到这对于延迟加载和默认值分配有何用处。

【讨论】:

  • 谢谢老哥~帮我解迷雾~~
  • 没问题。如果您想知道* 在数组前面或方法调用/签名中的作用,请搜索“ruby splat operator”。也许你已经知道了,但我记得我花了一段时间才找到一个(搜索“*”并不容易)。
  • 正是埃德!!我在谷歌上搜索,它只是忽略了所有这样的操作数(即使我引用/双引号它们)。这太酷了~谢谢大佬!!
  • 这是错误的,因为 StackOverflow、Ruby 邮件列表以及几乎所有创建的 Ruby 博客上已经讨论了无数次。
  • @Ed S. - 如果您浏览重复项,您会找到 A short-circuit (||=) edge case。总结:a||=b 不会扩展到 a=a||b 而是 a||a=b。这是一个细微的差别,但确实代表了文章中描述的不同行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 2012-08-27
相关资源
最近更新 更多