作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一些(有点自定义的)单例,它有 attr_reader :data
,其中包含哈希。
我想获取此数据,有时会在其中添加特定值。但是当我将数据设置为变量时,事实证明,该变量包含数据的link,而不是copy .
已更新我的“单例”代码:
class Company
FILE_PATH = "#{Rails.root}/config/company.yml"
attr_reader :data
def self.instance
@instance ||= new
end
def self.path
FILE_PATH
end
def save data
File.open(FILE_PATH, 'w') { |file| file.write(data.to_yaml) }
set_data
end
private
def initialize
set_data
end
def set_data
@data = HashWithIndifferentAccess.new(YAML.load(File.read(FILE_PATH)))
end
end
使用示例:
Company.instance.data[:bar]
=> nil
foo = Company.instance.data
foo[:bar] = 'buzz'
Company.instance.data[:bar]
=> 'buzz'
如何将数据副本放入变量?我试过 .dup
和 .copy
,但没有用。
(UPD:我试过在实例
上使用这些方法,而不是在数据
上。我的错。谢谢大家,谁回答对我来说。)
最佳答案
我尝试过使用 .clone
和 .dup
,它们似乎都适合我。
require 'singleton'
class MySingleton
include Singleton
attr_accessor :data
end
MySingleton.instance.data = {}
foo = MySingleton.instance.data
foo[:bar] = 'buzz'
puts foo # {:bar=>"buzz"}
puts MySingleton.instance.data # {:bar=>"buzz"}
MySingleton.instance.data = {}
foo = MySingleton.instance.data.dup # or .clone
foo[:bar] = 'buzz'
puts foo # {:bar=>"buzz"}
puts MySingleton.instance.data # {}
关于ruby-on-rails - 如何在 Ruby 中获取单例实例变量的克隆值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39246459/
我是一名优秀的程序员,十分优秀!