Rails —&=做什么?

时间:2019-09-13 08:53:49

标签: ruby-on-rails ruby operators

为帮助将来进行搜索,也可以将其描述为“和等于”或“与号等于”。

我在Rails源代码中找到了这一行:

attribute_names &= self.class.column_names

&=的功能是什么?

2 个答案:

答案 0 :(得分:6)

格式为a &= b的所谓的运算符赋值(其中&可以是另一个二进制运算符)是(几乎但不完全-布尔运算符是notable exception互不相同的特殊情况)等于a = a & b

由于Ruby中的运算符是在左操作数上调用的方法,并且可以被覆盖,因此了解它们的好方法是查看左操作数(或它们的祖先之一)的类的文档。 。

在给定上下文的情况下,

attribute_names您可能是ActiveRecord::AttributeMethods#attribute_names

  

返回该对象上可用属性的名称数组。

然后我们可以看到Array#&,它执行

  

Set交集—返回一个新数组,其中包含两个数组共有的唯一元素。该顺序保留在原始数组中。

     

它使用hasheql?方法比较元素以提高效率。

答案 1 :(得分:2)

通常情况下,它会在分配的左侧和右侧执行&,然后将结果分配到左侧。

11 & 10
# => 10
a = 11
a &= 10
a
=> 10

a = true
a &= false
a
#=> false

在您的情况下,它执行数组交集(&运算符),然后将结果分配给attribute names

[1,2,3] & [2,3,4]
# => [2, 3]
a &= [2,3,4]
a
#=> [2, 3]