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 или 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–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

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