2

Ruby の Object にメソッドを追加して、関連する値を再割り当てしたいと考えています。

たとえば、2 つの文字列がある場合、そのうちの 1 つでメソッドを呼び出して、基になるものへのポインターが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 に答える