類別 PP

Ruby 物件的美化列印器。

PP 的功能

p 的標準輸出會傳回這個

#<PP:0x81fedf0 @genspace=#<Proc:0x81feda0>, @group_queue=#<PrettyPrint::GroupQueue:0x81fed3c @queue=[[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], []]>, @buffer=[], @newline="\n", @group_stack=[#<PrettyPrint::Group:0x81fed78 @breakables=[], @depth=0, @break=false>], @buffer_width=0, @indent=0, @maxwidth=79, @output_width=2, @output=#<IO:0x8114ee4>>

美化列印的輸出會傳回這個

#<PP:0x81fedf0
 @buffer=[],
 @buffer_width=0,
 @genspace=#<Proc:0x81feda0>,
 @group_queue=
  #<PrettyPrint::GroupQueue:0x81fed3c
   @queue=
    [[#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>],
     []]>,
 @group_stack=
  [#<PrettyPrint::Group:0x81fed78 @break=false, @breakables=[], @depth=0>],
 @indent=0,
 @maxwidth=79,
 @newline="\n",
 @output=#<IO:0x8114ee4>,
 @output_width=2>

用法

pp(obj)             #=> obj
pp obj              #=> obj
pp(obj1, obj2, ...) #=> [obj1, obj2, ...]
pp()                #=> nil

以美化列印格式將 obj(s) 輸出到 $>

它會傳回 obj(s)

自訂輸出

若要為類別定義自訂的美化列印函式,請在類別中重新定義方法 #pretty_print(pp)。請注意,在重新定義 #pretty_print(pp) 之前需要 require 'pp'

#pretty_print 會接收 pp 參數,它是 PP 類別的執行個體。此方法會使用 textbreakablenestgrouppp 來列印物件。

美化列印 JSON

若要美化列印 JSON,請參閱 JSON#pretty_generate

作者

Tanaka Akira <[email protected]>

常數

VERSION

公開類別方法

pp(obj, out=$>, width=width_for(out)) 按一下以切換來源

以美化列印格式將 obj 輸出到 out,寬度為 width 個欄位。

如果省略 out,則假設為 $>。如果省略 width,則假設為 out 的寬度(請參閱 width_for)。

PP.pp 傳回 out

# File lib/pp.rb, line 95
def PP.pp(obj, out=$>, width=width_for(out))
  q = PP.new(out, width)
  q.guard_inspect_key {q.pp obj}
  q.flush
  #$pp = q
  out << "\n"
end
sharing_detection() 按一下以切換來源

傳回分享偵測旗標為布林值。預設為 false (nil)。

# File lib/pp.rb, line 124
def sharing_detection
  Ractor.current[:pp_sharing_detection]
end
sharing_detection=(b) 按一下以切換來源

將分享偵測旗標設定為 b。

# File lib/pp.rb, line 128
def sharing_detection=(b)
  Ractor.current[:pp_sharing_detection] = b
end
singleline_pp(obj, out=$>) 按一下以切換來源

obj 輸出至 out,類似 PP.pp,但沒有縮排和換行。

PP.singleline_pp 傳回 out

# File lib/pp.rb, line 107
def PP.singleline_pp(obj, out=$>)
  q = SingleLine.new(out)
  q.guard_inspect_key {q.pp obj}
  q.flush
  out
end
width_for(out) 按一下以切換來源

傳回 out 可用的寬度。由於 out 的寬度

  1. 如果 out 指定給 tty 裝置,則使用其寬度。

  2. 否則,或無法取得值,則假設 COLUMN 環境變數設定為寬度。

  3. 如果 COLUMN 未設定為非零數字,則假設為 80。

最後,傳回上述寬度值 - 1。

  • 這個 -1 是針對 Windows 命令提示字元,如果到達最後一欄,它會將游標移至下一行。

# File lib/pp.rb, line 78
def PP.width_for(out)
  begin
    require 'io/console'
    _, width = out.winsize
  rescue LoadError, NoMethodError, SystemCallError
  end
  (width || ENV['COLUMNS']&.to_i&.nonzero? || 80) - 1
end