类 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)) 点击切换源代码

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

如果省略 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