Переменные экземпляра присваивают значение по ссылке в ruby - PullRequest
0 голосов
/ 23 октября 2019

У меня есть сомнения, что в ruby ​​все ли объекты в ruby ​​передают или присваивают значения по ссылке. Потому что, когда я пытался присвоить переменную экземпляра локальным. Изменения, внесенные в локальные аффекты в переменной экземпляра, тоже.

Вот мой код.

@name = {:a=> 'sfgs', :b=> 'sdfsd'}
name = @name
name.except!(:a) 

, когда я печатаю @name the: пара ключ-значение была удалена. Если это так, любой другой способ предотвратить это. т.е. копирование переменной экземпляра без ссылки.

1 Ответ

0 голосов
/ 23 октября 2019

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

name = Marshal.load(Marshal.dump(@name))

name.except!(:a)
p name
#=> { :b => "sdfsd" }
p @name
#=> { :a => "sfgs", :b => "sdfsd" }
...