7

YAML を使用して Ruby ハッシュをファイルに書き込んでいます。

File.open(output_file, "w") {|file| file.puts YAML::dump(final)}

ハッシュには、文字列がキーとして含まれ、浮動小数点数が値として含まれます。

私の文字列に文字のみが含まれている場合、それらはファイルファイルにそのように出力されます:

abc: 1.0
bcd: 1.0
cde: 1.0

文字列がスペースで始まる場合、次のように出力されます。

! ' ab': 1.0

ファイルを再度読み込むと、すべて問題ありませんが、なぜこれが起こっているのか、それが何を意味するのかを知りたいです。

YAML のドキュメントを検索したところ、ローカル データ型を表すために 1 つの感嘆符が使用されていることがわかりました。

スペースで始まる文字列でこれが発生するのはなぜですか?

4

1 に答える 1

5

!「非特異的タグ」として知られています。YAML エンジンに、次の項目を文字列、ハッシュ、または配列としてデコードするように強制します。基本的に、異なるタイプとして解釈することを無効にします。エンジンがこのようにタグ付けしている理由はわかりません。必要ないようです。おそらく、あいまいさを取り除こうと熱心に試みているだけでしょうか?

編集:いずれにせよ、それは不要な構文です:

YAML.dump({' a'=>0})
=> "---\n! ' a': 0\n"
YAML.load("---\n! ' a': 0\n") # with the bang
=> {" a"=>0}
YAML.load("---\n' a': 0\n")   # without the bang
=> {" a"=>0}
于 2012-12-09T20:31:42.897 に答える