1

可能重复:
在不破坏锚点和别名的情况下读写 YAML 文件?

我正在使用带有默认 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介于main和之间something

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

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

谢谢你的帮助。

4

0 回答 0