私はハッシュを含むを持つシングルトン(ビットカスタム)をいくつか持っています。RubyでSingletonのインスタンス変数のクローン値を取得する方法は?
このデータを取得したい場合や、特定の値を追加する場合があります。 私は変数にデータを設定する場合でも、それが判明し、その変数は、リンクデータの、ないコピーが含まれています。
私の 'シングルトン' の コードUPDATED:
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:。。。私はないdata
に、instance
にこれらのメソッドを使用しようとした私のせいで私に答えたみんなありがとうを、)
'attr_reader:data'は冗長です。 – Aetherus
あなたはそうです。たぶん私は十分な情報を与えなかった、私はもう少し複雑なケースを持っている。 –
@Aetherusあなたは正しいです、ありがとう! –