0
我在理解如何克隆/複製使用ActiveSupport :: Configurable的配置對象時遇到了一些麻煩。我正在使用ActiveSupport :: Configurable模塊創建一個簡單的配置對象。在一些自動化測試中,我想放置當前的配置,並創建一個具有不同值的新配置對象。我有一個叫做remember_config
的方法,它只是做ActiveSupport ::可配置的配置對象不會完全克隆
module App
class Config
include ActiveSupport::Configurable
def self.remember_config
@previous_config = @config
@config = @config.clone
end
end
end
當我使用它時會出現問題。
App.config.foo = 1
App.config.foo # Returns 1
App.previous_config # Returns nil
App.remember_config
App.config.foo # Still returns 1
App.previous_config.foo # eturns 1
App.config.foo = 2
App.config.foo # Returns 2
App.config.previous_config.foo # Also returns 2, but I'd like it to return 1!
爲什麼最後一行返回2而不是1? @previous_config
和config
對象具有不同的object_id。也許這不是一個克隆問題。也許這是ActiveSupport :: Configurable魔術工作方式的一個問題。
我試過dup,但它也沒有工作。它也看起來像一個deep_dup方法可用,也沒有工作。 – CodeSmith
你可以給我發送上述配置的呼叫參數嗎?如果什麼都不起作用,我們總是可以將它們寫入文件或數據庫:D –
我最終放棄了'ActiveSupport :: Configurable'並使用常規實例變量。 'ActiveSupport :: Configurable'似乎有一些克隆問題。 – CodeSmith