5

我正在寻找一种发出 YAML 文件的方法,避免使用别名(主要是为了简化人类可读性)。我认为扩展Psych::Visitors::Emitteror Psych::Visitors::Visitor是要走的路,但我实际上无法找到 Ruby 决定是否完全转储锚点或使用别名引用它的位置。

我什至不介意重复使用锚点(使用它们的 &...... 引用),我只需要将别名扩展为完整结构。

我知道过去有人问过类似的问题,但是:

4

2 回答 2

3

我使用的一种简单(hacky)方法是将 yaml 转换为 json。然后将其转换回 YAML。新 YAML 不包含别名/锚点。

require 'json'

jsonObj = oldYaml.to_json
newYaml = YAML.load(jsonObj)
print newYaml.to_yaml
于 2017-09-07T20:04:01.063 回答
3

我发现这样做的唯一方法是对转储到 YAML 的对象执行深度克隆。这是因为 YAML 将根据它们的身份识别锚点和别名,如果你clonedup他们,新对象将是相同的,但具有不同的身份。

执行深度克隆的方法有很多,包括库支持,或编写自己的辅助函数——我将把它作为练习留给读者。

于 2016-06-16T12:32:52.163 回答