【发布时间】:2019-03-27 16:14:00
【问题描述】:
我正在尝试创建能够注册派生类以从基类创建的简单类。但是我找不到从后代中封装此功能的好方法。
类变量对我来说是个坏主意,因为它们在继承链中无处不在。所以我尝试对类实例变量做一些事情。完美的是,除了 register_as 之外,所有类方法都将不可访问
class A
@registered = {}
class << self
def register_as(name)
A.registered[name] = self
end
def known
A.registered
end
protected
attr_accessor :registered
end
def helpful_method
end
end
class B < A
class << self
def reg_trash
A.registered[:trash] = :trash
end
end
B.register_as :b
end
B.reg_trash
p A.known
但是注册仍然可以从 B 类访问。 目前看起来唯一可能的选择是将 A 类拆分为专用的 Factory 类,并且 A 类将只包含有用的实例方法。 也许可以通过 .inherited 和 .undef_method 做一些事情,不是吗?
【问题讨论】:
标签: ruby inheritance factory class-method