【发布时间】:2012-01-25 19:20:33
【问题描述】:
我确实做了一些搜索,但找不到简单问题的答案。
Ruby 中的p 和pp 有什么区别?我知道你需要require 'pp'。除此之外还有什么区别?
【问题讨论】:
标签: ruby
我确实做了一些搜索,但找不到简单问题的答案。
Ruby 中的p 和pp 有什么区别?我知道你需要require 'pp'。除此之外还有什么区别?
【问题讨论】:
标签: ruby
p 用于检查变量作为调试助手。它可以打印方法#inspect 的输出。比如p foo会输出foo.inspect的内容。
有时您需要调试复杂变量或嵌套变量。在这种情况下,p 将输出一个难以理解的长行。相反,pp 将尝试安排变量的内容以便更易于理解,例如缩进嵌套数组或对复杂对象的每个实例变量使用一行。 pp 调用#pretty_inspect 方法(pp 库将#pretty_inspect 方法添加到许多类,例如String、Array 或Struct)。
记住:p = 打印,pp = 漂亮的打印。
【讨论】:
它们略有不同。
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}]
请注意:我从一个显示 difference between pp and their gem 的网站上窃取了测试数据。
【讨论】:
p 打印一个对象的字符串表示,后跟一个换行符。 puts 也是如此。区别在于puts 使用to_s 将参数转换为String,而p 使用inspect。这意味着p 在调试方面通常比puts 更有用。
pp 是“漂亮的印刷品”;它使用pretty_inspect 来获取对象的字符串表示形式。
【讨论】:
p 与puts 相似,pp 与p 相似,那么这三个都将相似。问题在于区别。
p使用inspect和puts使用to_s的关键点。