委托给类方法

时间:2018-10-17 00:49:19

标签: ruby

在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 :(得分:5)

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是消息{{1}的别名}。