Ruby 2.2.0 リファレンスマニュアル > ライブラリ一覧 > ppライブラリ > PPクラス

class PP

クラスの継承リスト: PP < PrettyPrint < Object < Kernel < BasicObject

要約

オブジェクトなどを見やすく出力するためのクラスです。

目次

特異メソッド
pp sharing_detection sharing_detection= singleline_pp
インスタンスメソッド
comma_breakable object_group pp seplist

特異メソッド

pp(obj, out = $>, width = 79) -> object[permalink][rdoc]

指定されたオブジェクト obj を出力先 out に幅 width で出力します。 出力先 out を返します。

[PARAM] obj:
表示したいオブジェクトを指定します。
[PARAM] out:
出力先を指定します。<< メソッドが定義されている必要があります。
[PARAM] width:
出力先の幅を指定します。
require 'pp'
str = PP.pp([[:a, :b], [:a, [[:a, [:a, [:a, :b]]], [:a, :b],]]], '', 20)
puts str
#=>
[[:a, :b],
 [:a,
  [[:a,
    [:a, [:a, :b]]],
   [:a, :b]]]]

[SEE_ALSO] $>

sharing_detection -> bool[permalink][rdoc]
sharing_detection=(boolean)

共有検出フラグを表すアクセサです。 デフォルトは false です。true である場合、 PP.pp は一度出力したオブジェクトを再び出力する時 Object#pretty_print_cycle を使います。

[PARAM] boolean:
共有検出フラグを true か false で指定します。

例:

require 'pp'
b = [1, 2, 3]
a = [b, b]

pp a                        #=> [[1, 2, 3], [1, 2, 3]]

PP.sharing_detection = true
pp a                        #=> [[1, 2, 3], [...]]
singleline_pp(obj, out=$>) -> object[permalink][rdoc]

指定されたオブジェクト obj を出力先 out に出力します。 ただし、インデントも改行もしません。 出力先 out を返します。

[PARAM] obj:
表示したいオブジェクトを指定します。
[PARAM] out:
出力先を指定します。<< メソッドが定義されている必要があります。

インスタンスメソッド

comma_breakable -> ()[permalink][rdoc]

以下と等価な働きをするもので簡便のために用意されています。

text ','
breakable

[SEE_ALSO] PrettyPrint#text, PrettyPrint#breakable

object_group(obj) { ... } -> ()[permalink][rdoc]

以下と等価な働きをするもので簡便のために用意されています。

group(1, '#<' + obj.class.name, '>') { ... }
[PARAM] obj:
表示したいオブジェクトを指定します。

[SEE_ALSO] PrettyPrint#group

pp(obj) -> ()[permalink][rdoc]

指定されたオブジェクト obj を Object#pretty_print を使って自身のバッファに追加します。

obj がすでに、現在のノードの親において出力されていた場合には、 参照のループが存在しているので、Object#pretty_print の代わりに Object#pretty_print_cycle が使われます。

[PARAM] obj:
表示したいオブジェクトを指定します。
seplist(list, sep = lambda { comma_breakable }, iter_method = :each) {|e| ...} -> ()[permalink][rdoc]

リストの各要素を何かで区切りつつ、自身に追加していくために使われます。

list を iter_method によってイテレートし、各要素を引数としてブロックを実行します。 また、それぞれのブロックの実行の合間に sep が呼ばれます。

つまり、以下のふたつは同値です。

require 'pp'

q.seplist([1,2,3]) {|v| q.pp v }

q.pp 1
q.comma_breakable
q.pp 2
q.comma_breakable
q.pp 3
[PARAM] list:
自身に追加したい配列を与えます。iter_method を適切に指定すれば、 Enumerable でなくても構いません。
[PARAM] sep:
区切りを自身に追加するブロックを与えます。list がイテレートされないなら、 sep は決して呼ばれません。
[PARAM] iter_method:
list をイテレートするメソッドをシンボルで与えます。

[SEE_ALSO] PP#comma_breakable