使用 Ruby 中的 class 个变量克隆 Class
Clone Class with class variables in Ruby
我有第三个 party class,它广泛使用 class 变量:
class Config
def default_locale
@@default_locale ||= :en
end
end
这个class(I18n::Config)比较大,class变量比较多。完全重写不是个例
我需要获取此 class 的实例, 无论如何都不会影响 原始配置 class 变量。
这是 Rails 应用程序所必需的,我尝试让 I18n 可配置 每个请求 和 线程安全 在同时。
为了线程安全,我将使用RequestStore。我需要在那里放一个独立的 Config 实例,它不会影响原始 class 变量。
在 class 上调用 .dup 以获得相同但独立的可以启动的匿名 class。
config1 = I18n.config
config2 = I18n::Config.new # same class
config3 = I18n::Config.dup.new # different class
config1.default_locale # :en
config2.default_locale # :en
config3.default_locale # :en
config2.default_locale = :de
config1.default_locale # :de
config2.default_locale # :de
config3.default_locale # :en (unchanged)
我有第三个 party class,它广泛使用 class 变量:
class Config
def default_locale
@@default_locale ||= :en
end
end
这个class(I18n::Config)比较大,class变量比较多。完全重写不是个例
我需要获取此 class 的实例, 无论如何都不会影响 原始配置 class 变量。
这是 Rails 应用程序所必需的,我尝试让 I18n 可配置 每个请求 和 线程安全 在同时。
为了线程安全,我将使用RequestStore。我需要在那里放一个独立的 Config 实例,它不会影响原始 class 变量。
在 class 上调用 .dup 以获得相同但独立的可以启动的匿名 class。
config1 = I18n.config
config2 = I18n::Config.new # same class
config3 = I18n::Config.dup.new # different class
config1.default_locale # :en
config2.default_locale # :en
config3.default_locale # :en
config2.default_locale = :de
config1.default_locale # :de
config2.default_locale # :de
config3.default_locale # :en (unchanged)