Spec-Zone.ru › Ruby 3.3

модуль SingleForwardable

SingleForwardable может быть использован для настройки делегирования на уровне объекта также.

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

Также, SingleForwardable может быть использован для настройки делегирования для Class или Module.

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_delegator
Псевдоним для: def_single_delegator
def_delegators(accessor, *methods)
Псевдоним для: def_single_delegators
def_single_delegator(accessor, method, new_name=method) Показать исходный код
# File lib/forwardable.rb, line 310
def def_single_delegator(accessor, method, ali = method)
  gen = Forwardable._delegator_method(self, accessor, method, ali)

  ret = instance_eval(&gen)
  singleton_class.__send__(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
  ret
end

Определяет метод method, который делегирует вызов accessor (т. е. вызывает метод с тем же именем в accessor). Если указан new_name, он используется в качестве имени метода делегирования. Возвращает имя определённого метода.

Также алиас для: def_delegator
def_single_delegators(accessor, *methods) Показать исходный код
# File lib/forwardable.rb, line 296
def def_single_delegators(accessor, *methods)
  methods.each do |method|
    next if /\A__(?:send|id)__\z/ =~ method
    def_single_delegator(accessor, method)
  end
end

Сокращение для определения нескольких методов делегирования, но без возможности использования другого имени. Следующие два фрагмента кода имеют одинаковый эффект:

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

def_delegator :@records, :size
def_delegator :@records, :<<
def_delegator :@records, :map
Также алиас для: def_delegators
delegate method → accessor
delegate [method, method, ...] → accessor
Псевдоним для: single_delegate
single_delegate
Также алиас для: delegate

Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API