ruby yaml dump:如何防止别名解除引用?

时间:2013-01-23 11:41:03

标签: ruby yaml alias

  

可能重复:
  Read and write YAML files without destroying anchors and aliases?

我正在使用带有默认yaml引擎的ruby 1.9.3在应用程序中动态修改yaml文件,如下所示:

require 'yaml'

langs = YAML.load_file("i18n/de.yml")

langs["key"] = 'val' # change key to new value val

File.open("i18n/de.yml", 'w') do |f|
    YAML.dump(langs,f)
end

这非常有效,但我在yml中遇到别名问题。所以假设de.yml是这样的:

---
main: &aliasName
  key:
    title: translation
  another_key:
    title: another translation

something:
  <<: *aliasName

在调用上面的脚本之后,这个get被翻译成:

---
main:
  key: &18803600
    title: translation
  another_key: &18803120
    title: another translation
something:
  key: *18803600
  another_key: *18803120
key: val

如果我现在通过手动编辑文件向main添加内容,例如main.third_key,则不会在something中出现别名,因为别名已明确转换为别名main.keymain.another_key之间的mainsomething

所以看起来这些别名会在YAML.dumpYAML.load上被取消引用。有没有办法保存别名,就像在yaml文件中定义的那样? de.yml可能看起来像这样(我不在乎别名是否更改):

---
main: &18803600
  key: 
    title: translation
  another_key:
    title: another translation
something:
  <<: *18803600
key: val

感谢您的帮助。

0 个答案:

没有答案