如果我修改.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/