В чем разница между "p" и "pp"? - PullRequest
22 голосов
/ 25 января 2012

Я провел поиск, но не смог найти ответ на простой вопрос.

В чем разница между p и pp в Ruby?Я знаю, что вам нужно require 'pp'.Кроме того, в чем различия?

Ответы [ 3 ]

27 голосов
/ 26 января 2012

p используется для проверки переменной как помощника по отладке. Работает распечатка вывода метода #inspect. Например, p foo выведет содержимое foo.inspect.

Иногда вам нужно отладить сложные переменные или вложенные переменные. В этом случае p выведет длинную строку, которую трудно понять. Вместо этого pp попытается расположить содержимое переменной так, чтобы ее было легче понять, например, сделать отступ для вложенных массивов или использовать одну строку для каждой переменной экземпляра сложного объекта. pp делает это с помощью метода #pretty_inspect (библиотека pp добавляет методы #pretty_inspect ко многим классам, таким как String, Array или Struct).

Чтобы запомнить: p = печать, pp = красивая печать.

5 голосов
/ 25 января 2012

Они немного отличаются.

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 и их самоцветом .

3 голосов
/ 25 января 2012

p печатает строковое представление объекта, за которым следует новая строка. Так же и puts. Разница в том, что puts использует to_s для преобразования аргумента в строку, а p использует inspect. Это означает, что p часто более полезен для отладки, чем puts.

pp - «красивая печать»; он использует pretty_inspect для получения строкового представления объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...