“p”和“pp”的区别是什么?

34

我确实进行了一些搜索,但找不到简单问题的答案。

ppp在Ruby中有何区别?我知道您需要require 'pp'。除此之外还有什么区别吗?

3个回答

39

p用于作为调试助手检查变量。它打印出方法#inspect的输出结果。例如,p foo将输出foo.inspect的内容。

有时候需要调试复杂的变量或嵌套的变量。在这种情况下,p会输出一条难以理解的长行。相反,pp会尝试整理变量的内容,使其更易于理解,例如缩进嵌套数组或使用每个复杂对象实例变量的单行。pp调用#pretty_inspect方法来实现这一点(pp库将#pretty_inspect方法添加到许多类中,如StringArrayStruct)。

记住:p = 打印,pp = 漂亮打印。


6

它们略有不同。

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和它们的宝石之间区别 的网站上窃取了测试数据。

即使像上面提到的“ap”(也称为“Awesome Print”)一样,需要安装gem来使用它“gem install awesome_print”,但数据使用ap命令显示如下:'[ [0] false, [1] 42, [2] [ [0] "fourty", [1] "two" ], [3] { :now => 2015-09-29 22:39:13 +0800, :class => Time < Object, :distance => 4.2e+43 } ]' - Abhijeet

3

p 打印一个对象的字符串表示形式,并在末尾加上一个换行符,puts 也是如此。它们的区别是 puts 使用 to_s 将参数转换为字符串,而 p 使用 inspect。这意味着 p 在调试时通常比 puts 更有用。

pp 是 “pretty print”的缩写;它使用 pretty_inspect 获取一个对象的字符串表示形式。


你的措辞有些令人困惑。如果 p 就像 puts,而 pp 就像 p,那么这三个都是相似的。问题在于询问它们之间的区别。 - sawa
1
感谢您的评论,我已经更新了答案。我在这里发布另一个答案的原因是其他人错过了关键点,即 p 使用 inspectputs 使用 to_s - Alex D
@MattBriggs:我跟随你提供的链接,但它没有提到pretty_inspect。 - Andrew Grimm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接