yaml メモ

るりまで次は yaml 対応しようと思ってるので、普通に使いそうな範囲で触れるかもしれない点のメモ。

るびまによると、YAML で扱えるコレクション以外の要素は以下のようになるらしい。

・ 整数
・ 浮動小数点
・ 真偽値 (true, yes, on, false, no, off)
・ NULL (null, ~)
・ 日付 (yyyy-mm-dd)
・ タイムスタンプ (yyyy-mm-dd hh:mm:ss [+-]hh:mm)

y や n が true/false にできるはずだけど、上記にはないな。http://yaml.org/type/bool.html によると真偽値は以下。

y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF

psych のテストコードを見たら、syck に合わせて故意に真偽値にしていないようだ。syck がなんでやらなかったかは不明だけど。

また、null の定義は以下。最後の何もない状態が厄介だなぁ。

~|null|Null|NULL|(Empty)

YAML.load("") は仕様通りなのかがよく分からなかった。--- なしでも解釈されるんだから、nil にならないのだろうか?yaml.org 見たり、ruby-dev で検索したけどまだわかってない。最終的に ML に聞くかもしれない。

YAML.load("---\n")' # => nil   (想定通り)
YAML.load("--- ")'  # => nil   (想定通り)
YAML.load("")'      # => false (謎)
YAML.load("a: ")'   # => {"a"=>nil} (想定通り)
YAML.load('a: ""')  # => {"a"=>""}  (想定通り)

また、シンボル(:foo など)を Ruby の標準添付ライブラリではシンボルとして解釈するような特別な修正が入っているようだ(YAML の仕様ではない)。

上記を知った後で、"a: nil" が {"a"=>nil} になるならるりまに一言入れようと思ったけど大丈夫だった(ちゃんと{"a"=>"nil"} で解釈された)。

他に YAML ディレクティブやフロースタイル、.inf などを自分は知らなかったんだけど、たぶん触れないだろう。