Ruby中的“p”是什么?

我相信对于那些知道的人来说这是一个愚蠢的问题,但是我找不到解释它是什么或者是什么的。

CSV.open('data.csv', 'r') do |row| p row end 

p row ”是做什么的?

p()是一个内核方法

它将obj.inspect写入标准输出。

由于Object在内核模块中混合,所以p()方法在任何地方都是可用的。

顺便说一下,在诗歌模式中使用它是很常见的,也就是说,这个对象被丢弃了。 CSV片段可以写成像…

 CSV.open 'data.csv', 'r' do |row| p row end 

这里logging了内核模块的其余部分 。

Kernel#p #inspectKernel#puts的小debugging兄​​弟:它或多或less地和它一样工作,但它使用#inspect而不是#inspect来转换它的参数。

之所以有这样一个神秘的名字,是因为你可以快速的把它expression出来,并在debugging的时候再把它拿出来。 (我认为现在Ruby变得越来越好,“正确”的debugging支持变得不那么有用了。)

Kernel#p一些替代scheme是来自pp标准库的Kernel#pp (漂亮打印)和来自yaml标准库的Kernel#y (YAML)。

为什么不尝试呢?

 >> [1,2,3].each { |d| pd } 1 2 3 

您已经在系统中使用的其他文档选项是ri命令。 在任何时候你都可以input: ri p或者如果在中央命令的很多地方定义了p (你可以尝试ri Kernel.p 。 其他好的投注是Array.<whatever method>String.<whatever method>

如果你最终安装了一堆gem,这会减慢很多,但你可以查找加速查找过程的最简单的方法。

内核#p比打印和放置知名度要低。

这是类似的提出,它增加了一个换行符,而不是呼吁to_s,p调用检查。

参考

http://garethrees.co.uk/2013/05/04/p-vs-puts-vs-print-in-ruby/