Ruby 有更多选择的Yaml

Ruby 有更多选择的Yaml,ruby,yaml,ruby-1.9,Ruby,Yaml,Ruby 1.9,根据Phrogz和我对的回答,与Ruby 1.9一起使用的yaml库似乎只允许几个选项:缩进,行宽,规范,(通过将行宽设置为-1)。我想使用官方YAML格式允许的其他选项,包括但不限于use\u block。有没有可能通过一个小技巧激活其他选项,或者Ruby 1.9是否有一个可供选择的yaml库允许其他选项?为什么yaml库不提供其他选项呢?我发现,作为一种临时解决方案。不过,这也有一些问题 它没有阅读的能力。这只是为了写作 它不能用完全输出不受欢迎的Ruby类!ruby/class…notat

根据Phrogz和我对的回答,与Ruby 1.9一起使用的yaml库似乎只允许几个选项:
缩进
行宽
规范
,(通过将
行宽
设置为
-1
)。我想使用官方YAML格式允许的其他选项,包括但不限于
use\u block
。有没有可能通过一个小技巧激活其他选项,或者Ruby 1.9是否有一个可供选择的yaml库允许其他选项?为什么yaml库不提供其他选项呢?

我发现,作为一种临时解决方案。不过,这也有一些问题

  • 它没有阅读的能力。这只是为了写作
  • 它不能用
    完全输出不受欢迎的Ruby类!ruby/class…
    notation。在yaml gem中,这个符号被充分使用,因此Ruby类被保存在Ruby yaml Ruby往返中
  • 它使用
    !ruby/symbol…
    符号表示法,与yaml gem中使用的
    :…
    表示法相比,它看起来很长
  • 它使用
    \n:
    yaml语法用于哈希键,与yaml gem更紧凑的哈希表示法相比,它看起来很长
  • 到目前为止,问题2对我来说不是什么大问题,因此我以以下方式使用yaml和ya2yaml gems的组合来克服问题1、3、4:

    require "yaml" # For reading.
    require "ya2yaml" # For writing.
    
    class Object
      def to_yaml # Method for writing in yaml
        ya2yaml.
        # Put hash key on a single line if it is a symbol
        gsub(/^(\s*)\? !ruby\/symbol (\S+)\s+/, '\1:\2').
        # Use symbol literal
        gsub(/(?<=\s)!ruby\/symbol /, ':')
      end
    end
    
    阅读时需要“yaml”。
    书写时需要“ya2yaml”。
    类对象
    def to_yaml#用yaml书写的方法
    ya2yaml。
    #如果哈希键是一个符号,则将其放在一行上
    gsub(/^(\s*)\?!ruby\/symbol(\s+)\s+/,“\1:\2”)。
    #使用符号文字
    gsub(/(?)?