如果我修改.tap上下文中的数组,将返回修改后的版本:

states = [:a, :b].tap do |sts|
  sts << :c
end

puts states # [:a, :b, :c]

但如果我用|=修改它,它将返回相同的对象:
states = [:a, :b].tap do |sts|
  [[:a, :c], [:b, :d]].each do |type|
    sts |= type
  end

  puts sts.inspect # [:a, :b, :c, :d]
end

puts states.inspect # [:a, :b]

能给我指个正确的方向吗?

最佳答案

为什么?
很简单,因为您不会更改原始的sts而是创建一个新数组(从|=操作符)并使sts指向该新数组当然,只要tap块返回,这个临时数组就会永远丢失。
万一你不知道,

sts |= type


sts = sts | type

关于arrays - 为什么在Ruby中,pipe equals不适用于tap?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45826070/

10-11 08:30