【问题标题】:Rails—what does &= do?Rails——&= 是做什么的?
【发布时间】:2020-01-15 03:14:10
【问题描述】:

为了方便以后的搜索,也可以描述为“and equals”或“ampersand equals”。

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

attribute_names &= self.class.column_names

&=的作用是什么?

【问题讨论】:

    标签: ruby-on-rails ruby operators


    【解决方案1】:

    所谓的a &= b 形式的运算符赋值,其中& 可以是另一个二元运算符,是(几乎但不完全是——布尔运算符是notable exception,它们有一些不同的极端情况)相当于a = a & b

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

    你发现的attribute_names,根据上下文,很可能是ActiveRecord::AttributeMethods#attribute_names

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

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

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

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

    【讨论】:

      【解决方案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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-17
        • 2011-12-05
        • 2010-12-16
        • 2016-06-06
        相关资源
        最近更新 更多