おそらく私は単純なものがありませんが、RubyのDelegateClass
メソッドを使用する方法が分かりません。SimpleDelegator
クラスの代わりに使用することを意味します。たとえば、次のすべては、ほとんど同じように動作するように見える:DelegateClass
に渡されたクラスは関係していないようだということSimpleDelegatorの代わりにRuby DelegateClassを使用するのはいつですか? (DelegateClassメソッドとSimpleDelegatorクラス)
require 'delegate'
a = SimpleDelegator.new([0])
b = DelegateClass(Array).new([0])
c = DelegateClass(String).new([0])
a << 1
b << 2
c << 3
p a # => [0, 1]
p b # => [0, 2]
p C# => [0, 3]
注意を。
は、いくつかの時間のためにそれについて考えた後で、全体の委任者のパターンは、迅速な汚いハック:)のように私には見えます。あなたはメッセージを送信し、あなたはどのクラスが応答するのかを知らない。委譲者は、認識できないすべてのメッセージを、それらが応答するかどうか、またどのように応答するかを知らなくても通過させます(そうでなければ、サブクラスとして実現できますか?元のクラスは実際にはもう何も制御しませんし、それと他の世界との間に委任者があることさえ知りません。 – Alexey