在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
,而我正在竭尽全力。
答案 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}的别名}。