modul SingleForwardable

SingleForwardable kann verwendet werden, um Delegation auch auf Objektebene einzurichten.

printer = String.new
printer.extend SingleForwardable        # prepare object for delegation
printer.def_delegator "STDOUT", "puts"  # add delegation for STDOUT.puts()
printer.puts "Howdy!"

Darüber hinaus kann SingleForwardable verwendet werden, um Delegation für eine Klasse oder ein Modul einzurichten.

class Implementation
  def self.service
    puts "serviced!"
  end
end

module Facade
  extend SingleForwardable
  def_delegator :Implementation, :service
end

Facade.service #=> serviced!

Wenn Sie sowohl Forwardable als auch SingleForwardable verwenden möchten, können Sie die Methoden def_instance_delegator und def_single_delegator usw. verwenden.