2

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

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

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

任何人都可以看到实现这一目标的方法吗?

4

1 回答 1

3

你不能改变self,它总是指向当前对象。但是,您可以围绕对象创建代理。SimpleDelegator这在标准库中使用 ruby​​ 非常简单:

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')
于 2012-09-21T00:43:41.970 回答