オブジェクトに対し、メソッドの委譲機能を定義するモジュールです。
オブジェクトに対して extend して使います。
例:
require 'forwardable' g = Goo.new g.extend SingleForwardable g.def_delegator("@out", :puts) g.puts ...
また、SingleForwardable はクラスやモジュールに対して以下のようにする事もできます。
require 'forwardable' class Implementation def self.service puts "serviced!" end end module Facade extend SingleForwardable def_delegator :Implementation, :service end Facade.service # => serviced!
もし Forwardable と SingleForwardable の両方を使いたい場合、 def_instance_delegator と def_single_delegator メソッドの方を呼び出してください。
def_single_delegator(accessor, method, ali = method) -> ()
[permalink][rdoc]def_delegator(accessor, method, ali = method) -> ()
メソッドの委譲先を設定します。
委譲元のオブジェクトで ali が呼び出された場合に、委譲先のオブジェクトの method へ処理が委譲されるようになります。
委譲元と委譲先のメソッド名が同じ場合は, ali を省略することが可能です。
def_delegator は def_singleton_delegator の別名になります。
[SEE_ALSO] SingleForwardable#def_delegators
def_single_delegators(accessor, *methods) -> ()
[permalink][rdoc]def_delegators(accessor, *methods) -> ()
メソッドの委譲先をまとめて設定します。
委譲元のオブジェクトで methods のそれぞれのメソッドが呼び出された場合に、委譲先のオブジェクトの同名のメソッドへ処理が委譲されるようになります。
def_delegators は def_singleton_delegators の別名になります。
また、以下の 2 つの例は同じ意味です。
def_delegators :@records, :size, :<<, :map def_delegator :@records, :size def_delegator :@records, :<< def_delegator :@records, :map
[SEE_ALSO] SingleForwardable#def_delegator
single_delegate(hash) -> ()
[permalink][rdoc]delegate(hash) -> ()
メソッドの委譲先を設定します。
[SEE_ALSO] Forwardable#delegate