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