3

根据 Phrogz 和我对这个问题的回答,与 Ruby 1.9 一起使用的 yaml 库似乎只允许几个选项:、、、、indentation(并设置为)。我想使用官方 YAML 格式允许的其他选项,包括但不限于. 是否可以通过小技巧激活其他选项,或者是否有 Ruby 1.9 的替代 yaml 库允许其他选项?为什么 yaml 库不提供其他选项?line_widthcanonicalline_wrapline_width-1use_block

4

1 回答 1

0

作为临时解决方案,我找到了 ya2yaml。不过,这有一些问题。

  1. 它没有阅读能力。它只用于写作。
  2. 它不会完全输出带有!ruby/class ...符号的不受欢迎的 Ruby 类。在 yaml gem 中,完全使用了这种表示法,以便在 ruby​​-yaml-ruby 往返过程中保留 Ruby 类。
  3. 它使用!ruby/symbol ...符号表示法,与:...yaml gem 中使用的表示法相比,它看起来很长。
  4. 它使用? ... \n:yaml 语法作为哈希键,与使用 yaml gem 的更紧凑的哈希表示法相比,它看起来很长。

到目前为止,问题 2 对我来说没什么大不了的,所以我通过以下方式使用 yaml 和 ya2yaml gem 的组合来克服问题 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
于 2012-10-03T18:12:43.587 回答