可能重复:
在不破坏锚点和别名的情况下读写 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.key和main.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
谢谢你的帮助。