У меня есть сомнения, что в ruby все ли объекты в ruby проходят или присваивают значение по ссылке. Потому что, когда я попытался присвоить переменную экземпляра локальному. Изменения, внесенные в локальные изменения, также влияют на переменную экземпляра.
Вот мой код.
@name = {:a=> 'sfgs', :b=> 'sdfsd'}
name = @name
name.except!(:a)
Когда я печатаю @name, пара ключ-значение :a была удалена. Если да, то любым другим способом предотвратить это. i.e Копирование переменной экземпляра без ссылки.
1 ответ
Вам нужно deep copy
. Попробуй это:
name = Marshal.load(Marshal.dump(@name))
name.except!(:a)
p name
#=> { :b => "sdfsd" }
p @name
#=> { :a => "sfgs", :b => "sdfsd" }
except!
@name.dup
будет достаточно.
dup
:-P
Похожие вопросы
Новые вопросы
ruby
Ruby - это многоплатформенный динамический объектно-ориентированный интерпретируемый язык с открытым исходным кодом. Тег [ruby] предназначен для вопросов, связанных с языком Ruby, включая его синтаксис и его библиотеки. Вопросы Ruby on Rails должны быть помечены [ruby-on-rails].
Hash#except!
действителен ruby? Какая версия?