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
#inspect
是Kernel#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/