Ruby指针或创建自我分配方法

时间:2012-09-21 00:02:13

标签: ruby

我想在Ruby的Object中添加一个方法来重新分配与之关联的值。

例如,如果我有两个字符串,我可以在其中一个上调用我的方法,以便指向底层char[]的指针指向另一个char[]

a = object_a
b = object_b
a == object_b #=> false
a.my_method(object_b)
a == object_b #=> true

有人能看到实现这个目标的方法吗?

1 个答案:

答案 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')