【发布时间】:2018-05-03 16:05:59
【问题描述】:
我正在为某事苦苦挣扎。我已将我的代码抽象为尽可能简单,但我仍然不明白它为什么会有这种行为。
我正在创建一个由一组键值对组成的常量并将其冻结。然后我使用 .dup 方法将散列复制到一个新变量中。
但是,当我遍历一个数组并尝试将其存储在新变量的(以前为空的)数组中时,它不仅会更新新变量,还会更新原始常量。这似乎只适用于 .each 方法 - 如果我直接将新值作为新数组传递,它可以在不更新常量的情况下工作。
我的抽象代码如下:
CONFIG_VALUES = { results: [], loop_count: 0 }.freeze
the_results = ["foo", "bar"]
abc = CONFIG_VALUES.dup
the_results.each do |res|
abc[:results] << res
end
abc
#=> {:results=>["foo", "bar"], :loop_count=>0}
CONFIG_VALUES
#=> {:results=>["foo", "bar"], :loop_count=>0}
【问题讨论】:
标签: ruby-on-rails ruby constants immutability ruby-hash