0

由于文体原因,我想避免使用类变量,并希望用类实例变量替换它们。所以,如果我有:我可以使用Simple Form gem中的类实例变量替换类变量吗?

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 

这将打破简单的表单?

回答

3

如果有一类是子类或共享@@input_error_class,然后通过改变类变量类的实例变量,该变量将不会由子/超了共享的SimpleForm类的超类,以及可打破代码。另外,如果有一个使用类变量的实例方法,那可能会破坏代码。否则,它不会中断。

+0

+1子类。 –

1

我会说它应该工作,但实际上没有差别作为类变量。在这种情况下,类变量可以更简单地查看。 :)

由于没有实例生成,所以不会获得线程安全。通过这种设计,您不能在运行时更改行为,因为在Rails加载后变量相当静态。

除了类变量之外,另一种做法是使用ActiveSupport::Configuration模块生成配置,或者在没有此模块的情况下手动创建此类。但是在Rails加载后,配置仍然非常静态。

我的建议是,如果您需要在您的项目中全局更改,请检查是否有这样的配置。

如果您想在运行时自由更改它,最好查看其他API而不是配置部分。

相关问题