2011-10-24 43 views
7
更新YAML文件

我的班級:在Ruby中

class Mycfg 
    @@options = {} 

    def init 
     @@options = YAML.load_file(Dir.pwd + PATH) 
    end 

    def set(key, val) 
     @@options[key] = val 
    end 

    def get(key) 
     @@options[key] 
    end 

    def save 
    end 
end 

使用這個類:

oj = Mycfg.new 
oj.init 

if oj.get 'name' == 'tom' 
    oj.set 'changed', Data.now 
end 

oj.save 

YAML文件:

name : tom 
pawd : 123456 
version : 0.0.1 
created : 2011-10-24 
changed : 2011-10-24 

如何我完成方法save更新YAML文件是否有變化?

+1

您應該緩存散列的原始值。然後在程序結束時檢查它是否等於當前的@@選項。如果是這樣,然後擦除舊的yaml文件,並從頭開始ruby寫出散列to_yaml。如果你想看到這個例子,我會很樂意。 –

+0

我們可以爲這個類添加一個@@ copy_options來緩存已更改的內容,重點是我不知道如何將數據保存到yaml文件中。 – coolesting

回答

11

這是一個班輪。

w+將文件截斷爲0長度,並寫入,就好像它是新文件一樣。

options_hash是當前值@@options

您將需要一個getter/accessor來檢索完整散列。如果您製作了@@options實例變量而不是類變量,則可以簡單地執行attr_accessor :options,然後使用oj.options進行檢索。

File.open(Dir.pwd + PATH, 'w+') {|f| f.write(options_hash.to_yaml) } 
+1

'File.open(Dir.pwd + PATH,'w +'){| f | f.write(YAML :: dump(@@ options))}' 它適用於我,它無法找到'options_hash' – coolesting