Как присвоить переменную другой переменной, не ссылаясь друг на друга? - PullRequest
2 голосов
/ 04 октября 2019

Я хочу присвоить переменную другой переменной без указания ссылки. Скажем, у меня есть переменная hash. hash = {points: []}

Теперь я назначаю его другой переменной abc. abc = hash

Затем я изменяю значение points ключом hash.

hash[:points] << 10 # => hash = {points: [10]}

hash[:points] << 20 # => hash = {points: [10, 20]}

Также изменяется значение abc: # => {points: [10, 20]}

Я уже пробовал dup и clone при вводе hash в abc, но не работает.

Я хочу, чтобы abc оставался неизменным, даже если hash изменилось. abc # => {points: []}

Ответы [ 2 ]

4 голосов
/ 04 октября 2019

Вам нужно deep copy. Попробуйте это:

hash = { points: [] }
abc = Marshal.load(Marshal.dump(hash))

abc[:points] = 10
p abc
#-> { :points => 10 }
p hash
#-> { :points => [] }
0 голосов
/ 04 октября 2019
hash = { points: [] }

abc = transform_values(@:dup)
hash[:points] << 1 << 2

hash #=> {:points=>[1, 2]} 
abc  #=> {:points=>[]} 

См. Hash # transform_values ​​.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...