Есть ли способ изменить объект, на который ссылаются в Ruby? - PullRequest
1 голос
/ 25 июня 2011

У меня есть код, который использует ObjectSpace._id2ref, чтобы получить ссылку на объект из его идентификатора. Мне было интересно, есть ли какой-либо способ изменить то, на что указывает эта ссылка, или изменить каждую переменную, которая ссылается на определенный объект, чтобы все переменные, ссылающиеся на этот объект, имели новое значение. Код может выглядеть так:

a = 5
b = a
def change_ref(id, "hello")
    do_stuff()
end

a # => "hello"
b # => "hello"

1 Ответ

3 голосов
/ 25 июня 2011

Этого можно добиться с помощью класса SimpleDelegator , входящего в стандартную библиотеку Ruby:

require 'delegate'

a = SimpleDelegator.new(5)
b = a
p a     # => 5
p b     # => 5

a.__setobj__('hello')
p a     # => "hello"
p b     # => "hello"

Почти наверняка есть способ избежать необходимости делать это, что делает ваш код проще и понятнее. Я бы искал это.

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