おそらく私は単純なものが欠けていますが、Rubyの 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]
どのクラスがDelegateClass
に渡されるかは問題ではないように思われることに注意してください。
独自の動作を持ち、存続期間中に異なるオブジェクトに委任するオブジェクトが必要な場合は、サブクラスSimpleDelegatorを使用します。
基本的に、作成しているクラスが別のオブジェクトを取得しない場合は、DelegateClassを使用すると言います。 TempFile in Rubyは、ファイルオブジェクトを装飾するだけです。SimpleDelegatorはさまざまなオブジェクトで再利用できます。
require 'delegate'
class TicketSeller
def sellTicket()
'Here is a ticket'
end
end
class NoTicketSeller
def sellTicket()
'Sorry-come back tomorrow'
end
end
class TicketOffice < SimpleDelegator
def initialize
@seller = TicketSeller.new
@noseller = NoTicketSeller.new
super(@seller)
end
def allowSales(allow = true)
__setobj__(allow ? @seller : @noseller)
allow
end
end
to = TicketOffice.new
to.sellTicket » "Here is a ticket"
to.allowSales(false) » false
to.sellTicket » "Sorry-come back tomorrow"
to.allowSales(true) » true
to.sellTicket » "Here is a ticket"
ここに別の良い説明があります a-delegate-matter