我想将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.
答案 0 :(得分:1)
我假设您正在尝试在类级别定义委托者
你可以尝试这样定义:
class << self
extend Forwardable
attr_accessor :objects
def_delegator :objects, :count
end
我的意思是,您的代码与此代码之间的唯一区别是Forwardable
内的class << self
延伸