【问题标题】:Ruby |= assignment operatorRuby |= 赋值运算符
【发布时间】:2012-01-24 00:55:07
【问题描述】:

找到表http://phrogz.net/programmingruby/language.html#table_18.4,但找不到|=的描述

|= 赋值运算符是如何工作的?

【问题讨论】:

    标签: ruby programming-languages operators


    【解决方案1】:

    它在您提供的链接中列出。这是一个与按位或相结合的赋值。 这些是等效的:

    a = a | b
    a |= b
    

    【讨论】:

      【解决方案2】:

      按位或赋值。

      x |= y
      

      是以下的简写:

      x = x | y
      

      (就像x += yx = x + y 的简写一样)。

      【讨论】:

      • 呸,我的错,谢谢指正。更新了我的答案以反映按位或,而不是逻辑或。
      【解决方案3】:

      除了||=&&=具有特殊语义外,所有复合赋值运算符都按照这个简单的规则进行翻译:

      a ω= b
      

      一样
      a = a ω b
      

      因此,

      a |= b
      

      一样
      a = a | b
      

      【讨论】:

      • x ||= yx = x || y 有何不同?
      • 据我所知,||=&&= 也不例外。它们的功能似乎分别与a = a || ba = a && b 相同。如果有任何例外,您能否提供一个示例?
      • @JeremyMoritz:如果a 是一个setter(例如foo.bar=),那么a = a || b总是同时调用setter 和getter,而a ||= b如果a 为假(或&&= 为真),将 调用setter。换句话说:我可以写一个程序,可以输出你用的是||=还是= … || …,所以两者不等价。
      • @JeremyMoritz:请注意,这是 ISO Ruby 语言规范中的一个错误。 ISO 规范说,所有运算符 ω 的所有运算符分配 a ω= b 都被评估为 AS-IF,它们被写为 a = a ω b,但这仅适用于运算符 除了 ||&&.
      • 感谢@JörgWMittag 的详细解释!
      【解决方案4】:

      在处理数组时,|= 对于唯一地附加到数组很有用。

      >> x = [1,2,3]
      >> y = [3,4,5]
      
      >> x |= y
      >> x
      => [1, 2, 3, 4, 5]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-26
        • 1970-01-01
        • 2011-08-02
        • 2019-10-06
        • 2011-11-16
        • 2013-11-30
        • 2015-10-02
        • 1970-01-01
        相关资源
        最近更新 更多