Spec-Zone.ru › Ruby 3.4

модуль 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 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–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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