class 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 类的一个实例。该方法使用 text, breakable, nest, group 和 pp 来打印对象。

美化打印 JSON

要漂亮打印 JSON,请参考 JSON#pretty_generate。

作者

Tanaka Akira <[email protected]>

常量

VERSION

版本字符串

公共类方法

pp(obj, out=$>, width=width_for(out)) 点击切换源代码

width 列的漂亮打印格式将 obj 输出到 out

如果省略 out,则假定为 $>。 如果省略 width,则假定为 out 的宽度(请参阅 width_for)。

PP.pp 返回 out

# File pp.rb, line 96
def PP.pp(obj, out=$>, width=width_for(out))
  q = new(out, width)
  q.guard_inspect_key {q.pp obj}
  q.flush
  #$pp = q
  out << "\n"
end
sharing_detection() 点击切换源代码

以布尔值形式返回共享检测标志。默认值为 false (nil)。

# File pp.rb, line 125
def sharing_detection
  Ractor.current[:pp_sharing_detection]
end
sharing_detection=(b) 点击切换源代码

将共享检测标志设置为 b。

# File pp.rb, line 129
def sharing_detection=(b)
  Ractor.current[:pp_sharing_detection] = b
end
singleline_pp(obj, out=$>) 点击切换源代码

PP.pp 一样将 obj 输出到 out,但没有缩进和换行符。

PP.singleline_pp 返回 out

# File pp.rb, line 108
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 pp.rb, line 79
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