如果我修改-lt
上下文中的数组,将返回修改后的版本:
.tap
但如果我用states = [:a, :b].tap do |sts|
sts << :c
end
puts states # [:a, :b, :c]
修改它,它会返回相同的对象:
|=
可以指出我正确的方向吗?
答案 0 :(得分:2)
为什么?
很简单,因为您不会更改原始sts
。您改为创建一个新数组(来自|=
运算符)并使sts
指向该新数组。当然,只要tap
块返回,这个临时数组就会永远丢失。
如果您不知道,
sts |= type
是
的快捷方式sts = sts | type
答案 1 :(得分:1)
来自文档:
点按{| x |阻止}→obj
向块发出自我,然后返回self。此方法的主要目的是“利用”方法链,以便对链中的中间结果执行操作。
在第一种情况下,您修改传递的数组,以便更改。
在第二种情况下,您只需创建一个新数组:
a = [1, 2] # => [1, 2]
b = a
b |= [3]
a # => [1, 2]
b # => [1, 2, 3]