可能重复:
在不破坏锚点和别名的情况下读写 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.dump
or上被取消引用YAML.load
。有没有办法像在 yaml 文件中定义的那样保存别名?de.yml
可能看起来像这样(我不在乎别名是否更改):
---
main: &18803600
key:
title: translation
another_key:
title: another translation
something:
<<: *18803600
key: val
谢谢你的帮助。