PrettyPrintの出力先等を変えてみる、ちなみに
HashをPrettyPrintしたいけど、Prettyにならない場合があることをレイジ君から聞いたので、一応メモ。あまり必要ないかもしれないが。
>> pp hs {:i=>9, :b=>2, :k=>11, :j=>10, :e=>5, :g=>7, :d=>4, :f=>6, :c=>3, :h=>8, :a=>1} >> hs.merge!({:l => 12}) => {:i=>9, :b=>2, :l=>12, :k=>11, :j=>10, :e=>5, :g=>7, :d=>4, :f=>6, :c=>3, :h=>8, :a=>1} >> pp hs {:i=>9, :b=>2, :l=>12, :k=>11, :j=>10, :e=>5, :g=>7, :d=>4, :f=>6, :c=>3, :h=>8, :a=>1} => nil >> >> pp ary ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4", "5"] >> ary = %w(1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6) => ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "1", "2", "3", "4", "5", "6"] >> pp ary ["1", "2", (中略) "5", "6"] => nil >> >> pp [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6] [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6] => nil >> pp [1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7] [1, 2, 3, (中略) 6, 7] => nil >>
HashもArrayも79バイトまでだと改行しない。ということ。ただし、要素の区切りには1バイトのスペースがあり、Hashの場合はkeyと valueの間にスペースがない状態で、79バイトというのが仕様のようだ。どうしても79バイト以下のオブジェクトをPrettyPrintしたい場合は、Kernel#ppではなく、以下のようにする。
>> PP.pp [1,2,3], $>, 5 [1, 2, 3] => #<IO:0x2946af4>
pp.rbをみると、
def PP.pp(obj, out=$>, width=79) q = PP.new(out, width) q.guard_inspect_key {q.pp obj} q.flush #$pp = q out << "\n" end
となっているので。PPクラスのクラスメソッドppに明示的にwidthを指定して実行すれば、79バイト以下でも整形してくれる。ちなみに出力先も変えられる
>> f = File.open("c:/ikou/test.txt", "w+") >> PP.pp [1,2,3], f, 5 >> f.close