我有一些代码使用ObjectSpace._id2ref从其id获取对象的引用。我想知道是否有任何方法可以更改引用指向的内容或更改引用某个对象的每个变量,以便引用该对象的所有变量都将具有新值。代码可能如下所示:
a = 5
b = a
def change_ref(id, "hello")
do_stuff()
end
a # => "hello"
b # => "hello"
答案 0 :(得分:3)
您可以使用Ruby标准库附带的SimpleDelegator类实现此目的:
require 'delegate'
a = SimpleDelegator.new(5)
b = a
p a # => 5
p b # => 5
a.__setobj__('hello')
p a # => "hello"
p b # => "hello"
几乎可以肯定有一种方法可以避免需要这样做,这样可以使代码更简单,更容易理解。我会搜索那个。