module Forwardable

[edit]

要約

クラスに対し、メソッドの委譲機能を定義するモジュールです。

使い方

クラスに対して Object#extend して使います。Module#include でないところに注意して下さい。

例:

require 'forwardable'
class Foo
  extend Forwardable

  def_delegators("@out", "printf", "print")
  def_delegators(:@in, :gets)
  def_delegator(:@contents, :[], "content_at")
end
f = Foo.new
f.printf ...
f.gets
f.content_at(1)

目次

特異メソッド
インスタンスメソッド
定数

特異メソッド

debug -> bool[permalink][rdoc][edit]

委譲部分をバックトレースに含めるかどうかの状態を返します。

バックトレースを含める設定となっている時、真を返します。デフォルトは含めない設定となっています。

debug= -> bool[permalink][rdoc][edit]

委譲部分をバックトレースに含めるかどうかの状態を設定します。

インスタンスメソッド

def_instance_delegator(accessor, method, ali = method) -> ()[permalink][rdoc][edit]
def_delegator(accessor, method, ali = method) -> ()

メソッドの委譲先を設定します。

[PARAM] accessor:
委譲先のオブジェクト
[PARAM] method:
委譲先のメソッド
[PARAM] ali:
委譲元のメソッド

委譲元のオブジェクトで ali が呼び出された場合に、委譲先のオブジェクトの method へ処理が委譲されるようになります。

委譲元と委譲先のメソッド名が同じ場合は, ali を省略することが可能です。

def_delegator は def_instance_delegator の別名になります。

例:

require 'forwardable'
class MyQueue
  extend Forwardable
  attr_reader :queue
  def initialize
    @queue = []
  end

  def_delegator :@queue, :push, :mypush
end

q = MyQueue.new
q.mypush 42
q.queue    # => [42]
q.push 23  # => NoMethodError

[SEE_ALSO] Forwardable#def_delegators

def_instance_delegators(accessor, *methods) -> ()[permalink][rdoc][edit]
def_delegators(accessor, *methods) -> ()

メソッドの委譲先をまとめて設定します。

[PARAM] accessor:
委譲先のオブジェクト
[PARAM] methods:
委譲するメソッドのリスト

委譲元のオブジェクトで methods のそれぞれのメソッドが呼び出された場合に、委譲先のオブジェクトの同名のメソッドへ処理が委譲されるようになります。

def_delegators は def_instance_delegators の別名になります。

また、以下の 2 つの例は同じ意味です。

def_delegators :@records, :size, :<<, :map

def_delegator :@records, :size
def_delegator :@records, :<<
def_delegator :@records, :map

[SEE_ALSO] Forwardable#def_delegator

instance_delegate(hash) -> ()[permalink][rdoc][edit]
delegate(hash) -> ()

メソッドの委譲先を設定します。

[PARAM] hash:
委譲先のメソッドがキー、委譲先のオブジェクトが値の Hash を指定します。キーは SymbolString かその配列で指定します。

例:

require 'forwardable'
class Zap
   extend Forwardable
   delegate :length => :@str
   delegate [:first, :last] => :@arr
   def initialize
      @arr = %w/foo bar baz/
      @str = "world"
   end
end

zap = Zap.new
zap.length # => 5
zap.first  # => "foo"
zap.last   # => "baz"

定数

FORWARDABLE_VERSION -> String[permalink][rdoc][edit]

forwardable ライブラリのバージョンを返します。