我想预填充一个哈希,给定一个键数组和一个默认值(一个空数组)。我尝试使用#product
的{{1}}方法执行此操作。
Array
我不明白为什么将值应用于哈希中的所有键。相反,如果我使用返回的值> hash = Hash[[:foo, :bar].product([[]])] # => {:foo=>[], :bar=>[]}
> hash[:foo].push(:baz) # => {:foo=>[:baz], :bar=>[:baz]}
并直接从中填充哈希,则会得到预期的行为。
product
我正在使用ruby 2.3.6
答案 0 :(得分:1)
这是因为传递给哈希初始化程序的数组是同一对象,因此,如果您修改所述对象,则更改将在使用该对象的任何地方出现:
> hash = Hash[[:foo, :bar].product([[]])]
# => {:foo=>[], :bar=>[]}
> hash[:foo].object_id
# => 47106586247680
> hash[:bar].object_id
# => 47106586247680
如果您复制粘贴product
的输出,则使用2个不同的数组,因为它们分别被实例化。