我想创建一个将所有实例和类方法委托给另一个类的类。我的目标是能够在应用程序选项中设置一个名称,该名称似乎与其周围的代码相符。
这是我到目前为止所做的:
require 'delegate'
class Page < DelegateClass(PageAdapter)
# Empty
end
但是,这似乎只是委托实例方法,而不是类方法。
答案 0 :(得分:2)
您可以定义自己的委派方案:
class Page < DelegateClass(PageAdapter)
@@delegate_class=PageAdaptor
def self.delegate_class_method(*names)
names.each do |name|
define_method(name) do |*args|
@@delegate_class.__send__(name, *args)
end
end
end
delegate_class_method @@delegate_class.singleton_methods
end
答案 1 :(得分:0)
你不想要委托,你想要直接子类化:
class Page < PageAdapter
# Empty
end
证明:
class Foo
def self.cats?
"YES"
end
def armadillos?
"MAYBE"
end
end
class Bar < Foo; end
p Bar.new.armadillos?
#=> "MAYBE"
p Bar.cats?
#=> "YES"