YAMLで気をつけないといけないこと
メモ。今日はRails3のI18Nと戦っていたのですが、そこではまったこと。
例えばこんな風なYAML(つきのRubyのコード)を書いたとします。
require 'yaml' str = YAML.load <<EOB foo: aaa: n1: "A" bbb: n2: "B" aaa: n3: "C" EOB p str
結果はどうなると思いますか? なんとなく、
{"foo"=>{"aaa"=>{"n1"=>"A", "n3"=>"C"}, "bbb"=>{"n2"=>"B"}}}
みたいなものを期待していたのですが、実は下記のようになります。
{"foo"=>{"aaa"=>{"n3"=>"C"}, "bbb"=>{"n2"=>"B"}}}
一つ目の「aaa」のところで書いたものは、二つ目の「aaa」が来たときに上書きされて消えてしまうわけですね。なんで「n1: "A"」が無視されるんだ! なんかバグってる?! とか思っていたのですが、勘違いでした。ああ。
YAMLを書くとき、特に後からどんどん書き足していくような場合には、前後も見て気をつけないといけないですね。