myn*_*fey 34

按位OR赋值.

x |= y
Run Code Online (Sandbox Code Playgroud)

是简写:

x = x | y
Run Code Online (Sandbox Code Playgroud)

(就像x += y速记一样x = x + y).


小智 32

使用数组时| |对于唯一追加到数组非常有用.

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

>> x |= y
>> x
=> [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)


Jör*_*tag 9

通过预期||=&&=具有特殊语义,所有复合赋值运算符都根据这个简单的规则进行转换:

a ?= b
Run Code Online (Sandbox Code Playgroud)

是相同的

a = a ? b
Run Code Online (Sandbox Code Playgroud)

从而,

a |= b
Run Code Online (Sandbox Code Playgroud)

是相同的

a = a | b
Run Code Online (Sandbox Code Playgroud)

  • @JeremyMoritz:如果`a`是一个setter(例如`foo.bar=`),那么`a = a || b` 将*总是*调用 setter 和 getter,而 `a ||= b` 将*仅*在 `a` 为 false 时调用 setter(或者在 `&&=` 的情况下为 true)。换句话说:我可以编写一个程序,可以输出您是否使用了`||=`或`= ... || ...`,因此两者不等价。 (2认同)
  • @JeremyMoritz:请注意,这是 ISO Ruby 语言规范中的一个错误。ISO 规范规定,所有运算符“ω”的所有运算符分配“a ω= b”都会被评估,因为它们被写为“a = a ω b”,但这仅适用于*除*“|”之外的运算符。 |` 和 `&&`。 (2认同)