Rails——&= 是做什么的?
Rails—what does &= do?
为了方便以后的搜索,也可以描述为"and equals"或"ampersand equals"。
我在 Rails 源代码中找到了这一行:
attribute_names &= self.class.column_names
&=
的作用是什么?
一般情况下,对左右两边进行&
赋值,然后将结果赋给左边
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]
形式为 a &= b
的所谓运算符赋值,其中 &
可以是另一个二元运算符,是(几乎但不完全是 - 布尔运算符是 notable exception有一些不同的极端情况)相当于 a = a & b
.
由于 Ruby 中的运算符是在左操作数上调用的方法,并且可以被覆盖,了解它们是什么的一个好方法是查看 class 的文档左操作数(或它们的祖先之一)。
attribute_names
你发现,给定上下文,很可能 ActiveRecord::AttributeMethods#attribute_names
,
Returns an array of names for the attributes available on this object.
然后我们可以看到Array#&
,它执行
Set
Intersection — Returns a new array containing unique elements common to the two arrays. The order is preserved from the original array.
It compares elements using their hash
and eql?
methods for efficiency.
为了方便以后的搜索,也可以描述为"and equals"或"ampersand equals"。
我在 Rails 源代码中找到了这一行:
attribute_names &= self.class.column_names
&=
的作用是什么?
一般情况下,对左右两边进行&
赋值,然后将结果赋给左边
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]
形式为 a &= b
的所谓运算符赋值,其中 &
可以是另一个二元运算符,是(几乎但不完全是 - 布尔运算符是 notable exception有一些不同的极端情况)相当于 a = a & b
.
由于 Ruby 中的运算符是在左操作数上调用的方法,并且可以被覆盖,了解它们是什么的一个好方法是查看 class 的文档左操作数(或它们的祖先之一)。
attribute_names
你发现,给定上下文,很可能 ActiveRecord::AttributeMethods#attribute_names
,
Returns an array of names for the attributes available on this object.
然后我们可以看到Array#&
,它执行
Set
Intersection — Returns a new array containing unique elements common to the two arrays. The order is preserved from the original array.It compares elements using their
hash
andeql?
methods for efficiency.