Ruby 中的 << 和 <<= 有何不同

What is << and <<= different in Ruby

我是 Rails 上 Ruby 的新手。我知道 << operator 它在做什么,但我正在使用数据表并且我有这样的代码:

def data
    items.map do |donation|
      [].tap do |column|
        column << donation_path(donation)
        column <<= current_user.admin? ? link_to(donation.sender.name, admin_store_path(donation.sender)) : donation.sender.name 
      end
    end
  end

我尝试在 rails c 中 <<= 结果是:

irb(main):001:0> ar = []
=> []
irb(main):002:0> ar << 1
=> [1]
irb(main):003:0> ar <<= 1
=> [1, 1]
irb(main):004:0> ar <<= 2
=> [1, 1, 2]

我认为 <<= 与 << 类似,但我必须确定。

如果在Ruby中使用运算符op=,表达式

x op= y

相当于

x = x op y

在你的例子中,这意味着

a <<= b

相当于

a = a << b

但是由于 a << b 已经修改了 a,您使用 <<=.

没有任何好处

注意:正如评论中所指出的,这不适用于运算符 []:如果您想要一个赋值版本,则必须明确定义 []=