出于样式方面的原因,我想避免使用类变量,并希望用类实例变量替换它们。如果我有:
module SimpleForm
mattr_accessor :input_error_class
@@input_error_class = 'error-field'
...
end
我将其更改为:
module SimpleForm
@input_error_class = 'error-field'
class << self
attr_accessor :input_error_class
end
...
end
这会打破简单形式吗?
答案 0 :(得分:3)
如果有一个类是共享SimpleForm
的{{1}}的子类或超类,那么通过将类变量更改为类实例变量,该变量将不会被子共享/ superclass,这可能会破坏代码。此外,如果存在使用类变量的实例方法,则可能会破坏代码。否则,它不会破裂。
答案 1 :(得分:1)
我会说它应该可以工作,但实际上并没有作为类变量。在这种情况下,类变量更容易查看。 :)
由于没有生成实例,因此不会获得线程安全性。通过这种设计,您既不能在运行时更改行为,因为在Rails加载后变量是相当静态的。
除了类变量之外,另一种做法是使用ActiveSupport::Configuration
模块生成配置,或者在没有此模块的情况下手动创建此类。但是在Rails加载后,配置仍然非常静态。
我的建议是,如果您需要在项目中全局更改,请检查是否有配置。
如果您想在运行时自由更改它,最好查看其他API而不是配置部分。