将Enumerable的属性委托给类

时间:2017-07-22 06:04:05

标签: ruby

我想将Enumerable方法扩展到我的类,这样我就可以直接在我的类上调用它们,而不是在类的实例变量上调用它们,即X.objects

class X
  include Enumerable
  extend Forwardable
  @objects ||= []

  # tried this, but it doesn't work
  # def_delegator self, :count, @objects.count
  #def_delegators self, @objects

  class << self
    attr_accessor :objects
  end

  def initialize(name)
    @name = name
  end

  def save
    self.class.objects << self
  end

  def self.show
    objects
  end
end

y = X.new('a')
y.save
z = X.new('b')
z.save
n = X.new('c')
n.save
q = X.new('d')
q.save
p X.show
#p X.count # I want this to work.

1 个答案:

答案 0 :(得分:1)

我假设您正在尝试在类级别定义委托者

你可以尝试这样定义:

class << self
  extend Forwardable

  attr_accessor :objects
  def_delegator :objects, :count
end

我的意思是,您的代码与此代码之间的唯一区别是Forwardable内的class << self延伸