Ruby “什么是”呢;p";用红宝石?

Ruby “什么是”呢;p";用红宝石?,ruby,printf-debugging,Ruby,Printf Debugging,我敢肯定,对于那些知道的人来说,这是一个愚蠢的问题,但我找不到解释它的作用或是什么 CSV.open('data.csv', 'r') do |row| p row end “p行”有什么作用?为什么不试试呢 >> [1,2,3].each { |d| p d } 1 2 3 p()是一种内核方法 它将obj.inspect写入标准输出 因为对象混合在内核模块中,所以p()方法随处可用 顺便说一句,在诗歌模式中使用它是很常见的,这意味着帕伦夫妇被抛弃了。CSV代码段的编写方式

我敢肯定,对于那些知道的人来说,这是一个愚蠢的问题,但我找不到解释它的作用或是什么

CSV.open('data.csv', 'r') do |row|
  p row
end
p行
”有什么作用?

为什么不试试呢

>> [1,2,3].each { |d| p d }
1
2
3
p()
是一种内核方法 它将
obj.inspect
写入标准输出

因为对象混合在内核模块中,所以
p()
方法随处可用

顺便说一句,在诗歌模式中使用它是很常见的,这意味着帕伦夫妇被抛弃了。CSV代码段的编写方式如下:

CSV.open 'data.csv', 'r' do |row|
  p row
end
它是一个文档化的模块。

Kernel#p
Kernel#put
的小调试兄弟:它或多或少与它的工作方式完全相同,但它使用
\inspect
而不是
\u s>将其参数转换为

它之所以有如此神秘的名称,是因为您可以快速将其放入表达式中,并在调试时再次将其取出。(我想现在Ruby越来越“合适”的调试支持了,这就没那么有用了。)


一些
Kernel#p
的替代品是
pp
标准库中的
Kernel#pp
(漂亮的印刷体)和
YAML
标准库中的
Kernel#y
(YAML)。

系统中已有的文档的另一个选项是
ri
命令。您可以在任何时候键入:
ri p
,或者如果在许多地方为中心命令定义了
p
,您可以尝试
ri Kernel.p
。其他好的赌注是
数组。
字符串。

如果你最终安装了一堆gem,这将大大降低速度,但你可以查找fastrigem,这将大大加快查找过程

内核#p不如print和put出名

它与puts类似,它添加了一个换行符,但并没有调用_s,而是p调用inspect

参考资料


要理解p和put之间的区别,必须理解To_()和instance()方法之间的区别

to_s用于获取对象的字符串表示形式,而to_s是一个对开发人员更友好的版本,它还提供了对象的内容

class Dog
        def initialize(name, breed)
            @name = name
            @breed = breed
        end
        def to_s
            puts  "#@name's breed is #@breed."
        end
end

terra=Dog.new("Terra","Husky")
puts terra #Terra's breed is Husky.
p terra    #<Dog:0x00007fbde0932a88 @name="Terra", @breed="Husky">  
类狗
def初始化(名称、品种)
@name=name
@品种
结束
def至美国
放上“#name的品种是#品种。”
结束
结束
terra=狗。新(“terra”,“Husky”)
泰拉的品种是哈士奇。
p terra#

实际上它首先调用
#inspect
到它的参数,但足够接近;)对。删除了我的“别名”注释,因为它完全错误。也许更像“包装器”。直接链接到p的文档-