Я действительно занимался поиском, но не могу найти ответ на простой вопрос.
В чем разница между p
и pp
в Ruby? Я знаю, что вам нужно require 'pp'
. Кроме того, в чем отличия?
Я действительно занимался поиском, но не могу найти ответ на простой вопрос.
В чем разница между p
и pp
в Ruby? Я знаю, что вам нужно require 'pp'
. Кроме того, в чем отличия?
p
используется для проверки переменной как помощника отладки. Он печатает выходные данные метода #inspect
. Например, p foo
выведет содержимое foo.inspect
.
Иногда вам нужно отлаживать сложные переменные или вложенные переменные. В этом случае p
выводит длинную строку, которую трудно понять. Вместо этого pp
поставит попытку упорядочить содержимое переменной, чтобы ее было легче понять, например, отступы вложенных массивов или использование одной строки для каждой переменной экземпляра сложного объекта. pp
вызывает вызов метода #pretty_inspect
(библиотека pp
добавляет методы #pretty_inspect
ко многим классам, таким как String
, Array
или Struct
).
Чтобы помнить: p
= print, pp
= pretty print.
Они немного отличаются.
data = [false, 42, %w{fourty two}, {:now => Time.now, :class => Time.now.class, :distance => 42e42}]
p data
[false, 42, ["fourty", "two"], {:now=>2012-01-25 19:23:06 +0000, :class=>Time, :distance=>4.2e+43}]
pp data
[false,
42,
["fourty", "two"],
{:now=>2012-01-25 19:23:06 +0000, :class=>Time, :distance=>4.2e+43}]
Обратите внимание: я украл тестовые данные с сайта, на котором показано разница между pp и их драгоценным камнем.
p
печатает строковое представление объекта, за которым следует новая строка. Таким образом, puts
. Разница в том, что puts
использует to_s
для преобразования аргумента в строку, а p
использует inspect
. Это означает, что p
часто более полезно для отладки, чем puts
.
pp
- "довольно печатная"; он использует pretty_inspect
для получения строкового представления объекта.