Я борюсь с чем-то. Я абстрагировал свой код так, чтобы он был максимально простым, но я до сих пор не понимаю, почему у него такое поведение.
Я создаю константу, состоящую из набора пар ключ-значение, и замораживаю ее. Затем я использую метод .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}