設定ファイルの書き出し、書き込みみたいな事がしたかったので調べてて
使った事無かったyamlを使ってみようと思った。なんか見やすいですしおすし。
こんな風にかける。
ファイルに書き出したかったので、調べてみると、
1 | open( "./test.yml" , "w" ) do |f| |
でファイルに書き出せるっぽい。しかもrubyで書いたオブジェクトをそのままの形で書き出す事ができると、どこかで見た気がしたので、下みたいに書いて出力してみた。
08 | attr_accessor :hoge , :fuga |
10 | def initialize(hoge,fuga) |
25 | hoge = Hoge. new (hoge,piyog) |
28 | open( "./test.yml" , "w" ) do |f| |
すると、こんな風に書き出された。
違う!わたしが欲しいのはこんなYAMLちゃんじゃないわ!!!1
なんか’!ruby’とか入ってるのは、rubyのオブジェクトだからっぽい。
1 | hoge = { 'Hoge' =>{ 'hoge' => 'test1' , 'Piyo' =>{ 'piyo' => 'fuga' }}} |
これだと普通に出力されました。
これだよ!ほしかったのは
そこで、調べてみるとオブジェクトの’taguri’と'to_yaml_style'というのを書き換えてあげるといいといいらしい。いいらしいがうまくいかず(前確かめたときはちゃんとできたのに)。
(gihyo
言語別 YAML用ライブラリ徹底解説)
いろいろと検索結果をぶらぶらとしていて、たどりついた
ココ(YAML/オブジェクトシリアライズ処理を読む)に習って、rubyのソースを'to_yaml'で検索してみるとそれっぽいのが出てきました。
ちなみに確認したバージョンはruby-1.9.3-p392
03 | yaml_as "tag:ruby.yaml.org,2002:object" |
04 | def to_yaml_style; end |
05 | undef to_yaml_properties rescue nil |
06 | def to_yaml_properties; instance_variables.sort; end |
07 | def to_yaml( opts = {} ) |
08 | YAML: :quick_emit ( self , opts ) do |out| |
09 | out.map( taguri, to_yaml_style ) do |map| |
10 | to_yaml_properties. each do |m| |
11 | map.add( m[1..-1], instance_variable_get( m ) ) |
16 | alias :syck_to_yaml :to_yaml |
これだけ見てもさっぱりわからないですね。と、ここまでやって思ったんだけど、よくよく考えると今やりたいことはyamlでやる必要ないかなぁと。(←今ココ
rubyでyamlを書き出そうとして、なんとなしにrubyのライブラリのソースにたどり着いたので、いろいろと中身も見ていければなぁと思ったりしましたメモでした。(まわりくどい)
※文体変えた