【问题标题】:What does the operator ||= stand for in Ruby? [duplicate]运算符 ||= 在 Ruby 中代表什么? [复制]
【发布时间】:2010-11-26 05:18:41
【问题描述】:

可能重复:
What does ||= (or equals) mean in Ruby?

在 Google 中很难搜索到它,因为它是一个符号,而不是文本。

||= 代表什么?

它是如何工作的?

【问题讨论】:

    标签: ruby operators


    【解决方案1】:

    如果尚未分配,它会分配一个值。像这样:

    a = nil
    a ||= 1
    
    a = 1
    a ||= 2
    

    在第一个示例中,a 将设置为 1。在第二个示例中,a 仍为 1。

    【讨论】:

    • 看起来有点像 SQL coalesce 运算符
    • 谢谢。 . .它只是确保变量的当前值没有被覆盖。
    • 这很好。 C# 可以从中获得灵感。 :-)
    • 请注意nilfalse 都是假的。因此,如果您使用的值是布尔值,它不会区分“未分配”和“分配给假”,稍后a ||= true 将覆盖现有的false 值。 (不同于 SQL coalesce() 三元逻辑:db-fiddle.com/f/6JMNY7TLVEgTa4GdWg74Sc/0
    【解决方案2】:

    来自问题Common Ruby Idioms

    等价于

     if a == nil || a == false   
        a = b 
     end
    

    【讨论】:

      【解决方案3】:

      如果 b 为 nil,则将 a 赋值给它。

      a = :foo
      b ||= a
      # b == :foo
      

      如果 b 不为零,则不要更改它。

      a = :foo
      b = :bar
      b ||= a
      # b == :bar
      

      【讨论】:

        【解决方案4】:

        这是一个“缩写作业”(参见 Ruby Pocket Reference,第 10 页)

        a = a ||

        (意思是a被赋值为a,b的逻辑或形成的值

        变成

        a ||= b

        几乎所有运算符都有缩写版本(+= *= &&= 等)。

        【讨论】:

          【解决方案5】:

          我只能猜测,但我认为它代表与设置变量相结合的逻辑运算符(如其他语言中的 ^=、+=、*=)

          所以x ||= yx = x || y 相同

          编辑:我猜对了,见http://phrogz.net/ProgrammingRuby/language.html#table_18.4

          x = x || y 表示:如果设置则使用 x,否则分配 y。它可用于确保变量至少已初始化(为 0、为空数组等)

          【讨论】:

            猜你喜欢
            • 2013-02-20
            • 1970-01-01
            • 2012-03-30
            • 2012-03-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-02
            相关资源
            最近更新 更多