Изменение многомерного хеш-значения, и оно все равно - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь обновить многомерный хеш, а затем сравнить новый хеш со старым, но независимо от того, какое значение я изменяю, они все равно отображаются как равные.Есть ли эффективный способ сравнить каждое значение в двух хешах и вернуть false, если один не соответствует действительности

hash1 = {foo: {bar: "baz"}}
hash2 = hash1
hash2[:foo][:bar] = "foz"
hash2 == hash1 # This should be false but is returning true

1 Ответ

0 голосов
/ 28 сентября 2019

В отличие от назначения простых примитивных объектов, таких как целые числа, когда вы назначаете переменную хешу, она будет указывать на тот же хеш-объект.Таким образом, hash2 указывает на тот же объект, что и hash1 в памяти.Если вам нужно, чтобы они были одинаковыми по структуре, но были разными объектами, вам необходимо глубоко скопировать первый хеш.

def deep_copy(hash)
  Marshal.load(Marshal.dump(hash))
end

hash1 = {foo: {bar: "baz"}}
hash2 = deep_copy(hash1)
hash2[:foo][:bar] = "foz"
hash2 == hash1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...