6


1

ruby 1.9.1で動作するto_yamlメソッドのフォーマットオプションを取得する方法は?

YAMLドキュメントによると、http://yaml4r.sourceforge.net/doc/page/the_options_hash.htm [オプションのハッシュ]を `.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}

これは既知のバグですか? またはそれは現在Ruby 1.9.1を使用している人のために働いていますか?

1 Answer


2


それほど遠くない過去に、このためにCソースを比較的深く掘り下げました。 コメントで既に述べられたことを検証するためだけに投稿しています。

基本的にはできません。 Syckオプションは、YAMLライターを使用する前に、プロセスのどこかで失われます。

あなたが持つことができる最高のものは `to_yaml_style`です。 時々。

これは1.8と1.9でも同じです。