【发布时间】:2012-01-24 00:55:07
【问题描述】:
找到表http://phrogz.net/programmingruby/language.html#table_18.4,但找不到|=的描述
|= 赋值运算符是如何工作的?
【问题讨论】:
标签: ruby programming-languages operators
找到表http://phrogz.net/programmingruby/language.html#table_18.4,但找不到|=的描述
|= 赋值运算符是如何工作的?
【问题讨论】:
标签: ruby programming-languages operators
它在您提供的链接中列出。这是一个与按位或相结合的赋值。 这些是等效的:
a = a | b
a |= b
【讨论】:
按位或赋值。
x |= y
是以下的简写:
x = x | y
(就像x += y 是x = x + y 的简写一样)。
【讨论】:
除了||=和&&=具有特殊语义外,所有复合赋值运算符都按照这个简单的规则进行翻译:
a ω= b
和
一样a = a ω b
因此,
a |= b
和
一样a = a | b
【讨论】:
x ||= y 与 x = x || y 有何不同?
||= 和 &&= 也不例外。它们的功能似乎分别与a = a || b 和a = a && b 相同。如果有任何例外,您能否提供一个示例?
a 是一个setter(例如foo.bar=),那么a = a || b 将总是同时调用setter 和getter,而a ||= b如果a 为假(或&&= 为真),将仅 调用setter。换句话说:我可以写一个程序,可以输出你用的是||=还是= … || …,所以两者不等价。
ω 的所有运算符分配 a ω= b 都被评估为 AS-IF,它们被写为 a = a ω b,但这仅适用于运算符 除了 || 和&&.
在处理数组时,|= 对于唯一地附加到数组很有用。
>> x = [1,2,3]
>> y = [3,4,5]
>> x |= y
>> x
=> [1, 2, 3, 4, 5]
【讨论】: