yaml
いわゆる、書き方が知りたい人はRubyistMagazineへ
複数行にわたるyamlの書き方
要するに改行を使いたい時。
少しはまったので。メモ。
hoge: - |- Proc.new {|params| puts params } - "Proc.new {|params| puts params}"
↑はOKな例。僕は↓を書いてハマった。
hoge: - |- "Proc.new {|params| puts params } " - "Proc.new{|params| puts params}"
何がダメかというと、文字列の扱いに気づいてない僕が問題w
これを文字列としてしか使わない場合は大体OKだろうけど、evalとかに使いたい場面で困る。
実際にダメな方でやってみる。
irb(main):026:0>a = YAML::load_file('test.yml') #上記ダメな方のyaml => {"hoge"=>["\"Proc.new {|params|puts params\n } \"", "Proc.new{|params| puts params}"]} irb(main):027:0> (eval a['hoge'][0]).call("test") NoMethodError: undefined method `call' for "Proc.new {|params|puts params\n } " :String from (irb):27 irb(main):028:0> (eval a['hoge'][1]).call("test") test => nil irb(main):029:0> exit
yamlではどうやら、どれにも確定しなかった場合に文字列として扱うらしい。
hoge: #キー - hoge #配列の要素文字列 - "hoge" #配列の要素文字列 - 'hoge' #配列の要素文字列 - | "hoge" #バーチカルバーがあると、それは複数行にまたがる文字列である #事が確定するので、ダブルクォート込みで文字列になる #つまり読み込むと"\"hoge\""となる。 - 1 #数値
他の複数行にまたがる表現の時も同じ。
言われてみれば納得だけど、気づかんよ。要らんとこでハマッぜ。。。
次回もyamlがらみでハマった話を書いてみます。おやすみなさい。