Rails有一个类扩展叫做
问题是如何让子类拥有自己的
class_attribute
,它允许类实例变量的继承。这对于不可变对象(例如String
)有效,但对于可变对象无效。class Base
class_attribute :options
self.options = {}
end
class SubClass < Base
end
Base.options # {}
SubClass.options[:foo] = "bar" # { foo: "bar" }
Base.options # { foo: "bar" }
问题是如何让子类拥有自己的
options
副本,而不需要在其主体中显式初始化它:class SubClass < Base
self.options = {}
end
inherited
钩子中存在一些拼写错误/变量命名不正确/接收器错误等问题,所以给出的代码示例无法正常工作:应该将self._options = self._options.clone
替换为subClass.options = self.options.clone
... - Mayinxinherited
方法的末尾包含super
,否则你会遇到错误(在我的情况下是undefined method 'synchronize' for nil:NilClass
)。如果可以,请更新答案。 - baka-san