为帮助将来进行搜索,也可以将其描述为“和等于”或“与号等于”。
我在Rails源代码中找到了这一行:
attribute_names &= self.class.column_names
&=
的功能是什么?
答案 0 :(得分:6)
格式为a &= b
的所谓的运算符赋值(其中&
可以是另一个二进制运算符)是(几乎但不完全-布尔运算符是notable exception互不相同的特殊情况)等于a = a & b
。
由于Ruby中的运算符是在左操作数上调用的方法,并且可以被覆盖,因此了解它们的好方法是查看左操作数(或它们的祖先之一)的类的文档。 。
在给定上下文的情况下, attribute_names
您可能是ActiveRecord::AttributeMethods#attribute_names
,
返回该对象上可用属性的名称数组。
然后我们可以看到Array#&
,它执行
Set
交集—返回一个新数组,其中包含两个数组共有的唯一元素。该顺序保留在原始数组中。它使用
hash
和eql?
方法比较元素以提高效率。
答案 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]