我想在Ruby的Object中添加一个方法来重新分配与之关联的值。
例如,如果我有两个字符串,我可以在其中一个上调用我的方法,以便指向底层char[]
的指针指向另一个char[]
。
a = object_a
b = object_b
a == object_b #=> false
a.my_method(object_b)
a == object_b #=> true
有人能看到实现这个目标的方法吗?
答案 0 :(得分:3)
您无法更改self
,它始终指向当前对象。但是,您可以围绕对象创建代理。在ruby中使用标准库中的SimpleDelegator
非常简单:
require 'delegate'
a = SimpleDelegator.new 'foo'
b = 'bar'
a == b # false
a.__setobj__(b)
a == b # true
您可以将__setobj__
替换为更好的内容,例如:
require 'delegate'
class AwesomeDelegator < SimpleDelegator
alias_method :become, :__setobj__
end
a = AwesomeDelegator.new 'foo'
...
a.become('bar')