代码之家  ›  专栏  ›  技术社区  ›  jpemberthy

如何获得在Ruby1.9.1上工作的to-yaml方法的格式化选项?

  •  6
  • jpemberthy  · 技术社区  · 16 年前

    根据YAML文档,可以通过 hash of options .to_yaml 方法。

    当前,当我传递文档建议的选项时,它不起作用,哈希将被忽略。

    irb(main):001:0> require 'yaml'
    => true
    irb(main):002:0> user = { "1" => { "name" => "john", "age" => 44 } }
    user.to_yaml
    => "--- \n\"1\": \n  name: john\n  age: 44\n"
    

    现在,传递一些选项:

    irb(main):014:0> user.to_yaml( :Indent => 4, :UseHeader => true, :UseVersion => true )
    => "--- \n\"1\": \n  name: john\n  age: 44\n"
    irb(main):015:0> user.to_yaml( :Separator => "\n" )
    => "--- \n\"1\": \n  name: john\n  age: 44\n"
    irb(main):016:0> user.to_yaml( :separator => "\n" )
    => "--- \n\"1\": \n  name: john\n  age: 44\n"
    irb(main):017:0> RUBY_VERSION
    => "1.9.1"
    

    如您所见,传递选项不起作用。只有默认值:

    YAML::DEFAULTS
    => {:Indent=>2, :UseHeader=>false, :UseVersion=>false, :Version=>"1.0", :SortKeys=>false, :AnchorFormat=>"id%03d", :ExplicitTypes=>false, :WidthType=>"absolute", :BestWidth=>80, :UseBlock=>false, :UseFold=>false, :Encoding=>:None}
    

    这是已知的虫子吗?或者它目前正在为任何使用Ruby1.9.1的人工作?

    1 回复  |  直到 16 年前
        1
  •  2
  •   kch    16 年前

    在不远的过去,我已经对C源进行了比较深入的研究。我发帖只是为了证实评论中已经说过的话。

    基本上,做不到。在攻击YAML作者之前,Syck选项会在过程中的某个地方丢失。

    你能拥有的最好的是 to_yaml_style . 有时候。

    1.8和1.9也是这样。