可能重复:
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.key
和main.another_key
之间的main
和something
。
所以看起来这些别名会在YAML.dump
或YAML.load
上被取消引用。有没有办法保存别名,就像在yaml文件中定义的那样? de.yml
可能看起来像这样(我不在乎别名是否更改):
---
main: &18803600
key:
title: translation
another_key:
title: another translation
something:
<<: *18803600
key: val
感谢您的帮助。