【问题标题】:How to emit YAML in Ruby expanding aliases如何在 Ruby 扩展别名中发出 YAML
【发布时间】:2014-08-21 21:37:44
【问题描述】:

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

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

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

【问题讨论】:

标签: ruby yaml alias psych


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 2016-02-19
      • 2011-09-23
      • 2013-10-30
      • 2014-07-18
      • 1970-01-01
      • 2011-06-11
      相关资源
      最近更新 更多