それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

irbのp関数の出力が欲しい

p 関数で書き出すと、ハッシュや、配列がRubyコードっぽく出力される。これってFFのjavascriptのto_sourceっぽいんだ。
この出力をファイルに書き出したい。

Hashをソースに書き出す #insepect

>> {:a=>"aaaa", "b"=> 1111}.inspect
=> "{"b"=>1111, :a=>"aaaa"}"          #文字列になったよ!

このObject#inspectは、Hashでこれをよく使うのでHash#to_sourceとかあってもいいよね。



http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#p

組み込み関数 - Rubyリファレンスマニュアル #p

p(obj, [obj2, ...])

obj を人間に読みやすい形で出力します。以下のコードと同じです。 (Object#inspect参照)

print obj.inspect, "\n", obj2.inspect, "\n", ...

nil を返します。

だそうだ。

putsのようにIOモジュールだと思って探し回ってた。

組み込み関数だったのね。。。putsが、$stdout.putsだから、IOのダッグタイピングだと思ってたら違った。
この所為で3時間無駄にした。

to_yamlがね。なんか出力気持ち悪いんだ。"00023430"みたいな文字列を出力すると、クォートがあったり無かったり。だからほかの文字列化手法を探してたら、Googleにmarshalに案内されて絶望してた。自分で再帰書いちゃったよ。。。

2010-01-08追記

Python の ppと同じ名前のライブラリがRubyにもあった。pp(PrettyPrint)すれば全て解決だった。