【问题标题】:Updating a YAML file in Ruby在 Ruby 中更新 YAML 文件
【发布时间】:2011-12-13 19:59:15
【问题描述】:

我的班级是:

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 文件?

【问题讨论】:

  • 你应该缓存哈希的原始值。然后在程序结束时检查它是否等于当前的@@options。如果是这样,则删除旧的 yaml 文件并让 ruby​​ 从头开始​​写出哈希 to_yaml。如果您想以此为例,我很乐意提供帮助。
  • 我们可以为这个类添加一个@@copy_options 来缓存更改的内容,关键是我不知道如何将数据保存到 yaml 文件中。

标签: ruby yaml


【解决方案1】:

这是一个单线。

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) }

【讨论】:

  • File.open(Dir.pwd + PATH, 'w+') {|f| f.write(YAML::dump(@@options)) } 它对我有用,但找不到 options_hash
猜你喜欢
  • 2012-12-06
  • 2015-05-28
  • 2014-02-20
  • 2011-01-17
  • 2015-12-30
  • 2011-04-22
  • 2019-06-06
  • 1970-01-01
相关资源
最近更新 更多