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而不是配置部分。

相關問題