Делегирование в метод класса - PullRequest
0 голосов
/ 17 октября 2018

Возможно ли в Ruby делегировать метод класса другого класса, чтобы заменить метод ниже?

def sugar(param)
  Klass.a_very_long_method_name(param)
end

Я пытался использовать Forwardable

   extend Forwardable
   def_delegator 'Klass.a_very_long_method_name', :sugar

Но, похоже, это не сработает.

Во многих местах я звоню Klass.a_very_long_method_name и пытаюсь все высушить.

1 Ответ

0 голосов
/ 17 октября 2018
require 'forwardable'

class Klass
  def self.a_very_long_method_name(name)
    puts "Hi, #{name}"
  end
end

class Sugar
  extend Forwardable
  def_delegator Klass, :a_very_long_method_name, :verrry_long
end

s = Sugar.new
s.verrry_long "Sue"
  # Hi, Sue

В def_delegator Klass, :a_very_long_method_name, :verrry_long, Klass - получатель пересылки сообщения, :a_very_long_method_name - сообщение, которое необходимо переслать, а :verrry_long - псевдоним сообщения :a_very_long_method_name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...