Spec-Zone.ru › Ruby 4.0

класс PP

Родительский класс:
PrettyPrint
Подключённые модули:
PP::PPMethods

Средство для красивого вывода объектов 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.

Автор

Танака Акира <akr@fsij.org>

Константы

VERSION

Строка версии

Общедоступные методы класса

pp (obj, out=$>, width=width_for(out)) Показать исходный код
# File lib/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

Выводит obj в out в красиво отформатированном виде, используя width столбцов по ширине.

Если out не указан, предполагается $>. Если width не указан, предполагается ширина out (см. width_for).

PP.pp возвращает out.

sharing_detection () Показать исходный код
# File lib/pp.rb, line 125
def sharing_detection
  Ractor.current[:pp_sharing_detection]
end

Возвращает флаг обнаружения совместного использования в виде логического значения. По умолчанию он равен false (nil).

sharing_detection= (b) Показать исходный код
# File lib/pp.rb, line 129
def sharing_detection=(b)
  Ractor.current[:pp_sharing_detection] = b
end

Устанавливает флаг обнаружения совместного использования в значение b.

singleline_pp (obj, out=$>) Показать исходный код
# File lib/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

Выводит obj в out, как PP.pp, но без отступов и переводов строк.

PP.singleline_pp возвращает out.

width_for (out) Показать исходный код
# File lib/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

Возвращает доступную ширину для out. Ширина out определяется следующим образом:

  1. Если out связан с устройством tty, используется его ширина.

  2. В противном случае, а также если получить значение не удалось, предполагается, что в переменной окружения COLUMN задана ширина.

  3. Если COLUMN не задана ненулевым числом, предполагается значение 80.

И наконец, возвращается указанное выше значение ширины минус 1.

  • Это вычитание единицы необходимо для командной строки Windows: когда курсор достигает последнего столбца, он перемещается на следующую строку.

Ruby Core © 1993–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API