如何在Ruby扩展别名中发出YAML

时间:2014-07-01 10:46:40

标签: ruby yaml alias psych

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

我甚至不介意锚是否被重复使用(使用& ......引用),我只需要将别名扩展到完整结构。

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

2 个答案:

答案 0 :(得分:2)

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

有许多方法可以执行深层克隆,包括库支持,或者编写自己的帮助函数 - 我将把它留给读者练习。

答案 1 :(得分:0)

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

require 'json'

jsonObj = oldYaml.to_json
newYaml = YAML.load(jsonObj)
print newYaml.to_yaml