我正在寻找一种方法来发出YAML文件,避免使用别名(主要是为了简化人类的可读性)。我认为延长Psych::Visitors::Emitter
或
Psych::Visitors::Visitor
是要走的路,但我实际上找不到Ruby决定是否完全转储锚,或者用别名引用它。
我甚至不介意锚是否被重复使用(使用& ......引用),我只需要将别名扩展到完整结构。
我知道过去曾问过类似的问题,但是:
答案 0 :(得分:2)
我发现这样做的唯一方法是对要转储到YAML的对象执行深度克隆。这是因为YAML将根据他们的身份识别锚点和别名,如果你clone
或dup
他们,新对象将是相同的,但具有不同的身份。
有许多方法可以执行深层克隆,包括库支持,或者编写自己的帮助函数 - 我将把它留给读者练习。
答案 1 :(得分:0)
我使用的一种简单(hacky)方法是将yaml转换为json。然后将其转换回YAML。新的YAML不包含别名/锚点。
require 'json'
jsonObj = oldYaml.to_json
newYaml = YAML.load(jsonObj)
print newYaml.to_yaml