Ruby中是否可以委托另一个类的类方法来替换下面的方法?
def sugar(param)
Klass.a_very_long_method_name(param)
end
Run Code Online (Sandbox Code Playgroud)
我试过用 Forwardable
extend Forwardable
def_delegator 'Klass.a_very_long_method_name', :sugar
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.
我发现自己要Klass.a_very_long_method_name在很多地方打电话,我正在努力让事情干涸.
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
Run Code Online (Sandbox Code Playgroud)
In def_delegator Klass, :a_very_long_method_name, :verrry_long,Klass是消息转发的接收者,:a_very_long_method_name是要转发的消息,是消息:verrry_long的别名:a_very_long_method_name.