【问题标题】:Difference between || and ||=? [duplicate]|| 之间的区别和||=? [复制]
【发布时间】:2013-07-01 22:54:27
【问题描述】:

我是 Ruby 新手。

|| 和 ||= 有什么区别?

>> a = 6 || 4
=> 6
>> a ||= 6
=> 6

听起来他们是一样的。

【问题讨论】:

  • 不是来自 Ruby,但 ||= 可能类似于 +=
  • ||= 与 += 非常不同。

标签: ruby


【解决方案1】:

您可以将a ||= 6扩展为

a || a = 6

所以你可以看到如果a不是nil或false,它使用a,否则它会将值分配给a并返回该值。这通常用于值的记忆。

更新

感谢第一条评论指出||=(或等于)运算符的真正扩展。我学到了一些新东西,并找到了这篇有趣的帖子来讨论它。 http://dablog.rubypal.com/2008/3/25/a-short-circuit-edge-case

【讨论】:

  • 这是错误的。它(诚然不直观)扩展到a || a = 6
  • 我必须承认我从来没有想过这个扩展。 @EdS。你有来源或我可以检查的方法吗?我用它更新了我的答案,因为它确实有意义。
  • 检查两个重复主题之一。我不得不承认,几年前我的想法和你一样,并回答了同样的问题,但我被一位知识渊博的 SO 成员纠正了。编辑:哎呀,我看到你找到了。
【解决方案2】:

x ||= y 表示如果 x 为 null 或 undefined 或 false ,则将 y 分配给 x ;这是x = y unless x的快捷方式。

对于 Ruby 短路运算符 ||,如果左操作数为真,则不计算右操作数。

现在我在||= 上面的几行中提供了一些快速示例:

当 x 未定义且 n 为 nil:

unless

y = 2
x = y unless x
x # => 2

n = nil
m = 2
n = m unless n
m # => 2

=||

y = 2
x ||= y
x # => 2

n = nil
m = 2
n ||= m
m # => 2

【讨论】:

    【解决方案3】:

    a = 6 || 4 和 a ||= 6 两个表达式都返回相同的结果,但区别在于,||= 会在变量为 nil 或 false 时为变量赋值。

    【讨论】:

      【解决方案4】:

      a ||= 6 仅在尚未分配的情况下分配 6。 (实际上,正如克里斯所说,虚假)

      a = 4 一个 ||= 6 => 4 a = 4 || 6 => 4

      【讨论】:

        【解决方案5】:

        ||= 仅当左侧值为 false 时,才会将左侧值设置为右侧值。

        在这种情况下,6 和 4 都是真值,所以a = 6 || 4 会将a 设置为第一个真值,即6。

        仅当a 为假时,a ||= 6 才会将 a 设置为 6。也就是说,如果它是 nil 或 false。

        a = nil
        a ||= 6
        a ||= 4
        a # => 6
        

        【讨论】:

        • 听起来像 undefined 也包括。根据上面的答案?
        • 是的,您可以使用||= 定义以前未定义的变量。
        • @KitHo 是的,我确实包括了那个.. :)
        猜你喜欢
        • 2014-11-01
        • 1970-01-01
        • 2012-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 2013-11-11
        • 2013-06-28
        相关资源
        最近更新 更多