Ruby 如何委托类方法?

Ruby 如何委托类方法?,ruby,delegation,Ruby,Delegation,我想创建一个类,将所有实例和类方法委托给另一个类。我的目标是能够为应用程序选项中设置的类指定一个名称,该名称似乎与周围的代码相匹配 这就是我到目前为止所做的: require 'delegate' class Page < DelegateClass(PageAdapter) # Empty end 需要“委托” 类页面

我想创建一个类,将所有实例和类方法委托给另一个类。我的目标是能够为应用程序选项中设置的类指定一个名称,该名称似乎与周围的代码相匹配

这就是我到目前为止所做的:

require 'delegate'

class Page < DelegateClass(PageAdapter)
  # Empty
end
需要“委托”
类页面

但是,这似乎只是委托实例方法,而不是类方法。

您可以定义自己的委托方案:

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
class页面
您不需要委派,您需要直接子类化:

class Page < PageAdapter
  # Empty
end
class页面
证明:

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"
class-Foo
def自助猫?
“是的”
结束
犰狳?
“也许”
结束
结束
类Bar“也许”
猫?
#=>“是”

我认为您应该将
PageAdapter
ShiningRay子类化-我认为您是对的。我觉得自己有点傻,没有想到这一点:)如果你把它作为一个答案,我会选择它。这不是问题:)@metakungfu注意评论:ShiningRay建议子类化,OP明确意识到这是正确的答案。我添加这个答案是因为ShiningRay从未返回并将评论转换为答案。