debug ruby printf-debugging

debug - ruby binding pry



¿Qué es "p" en Ruby? (6)

p() es un método de Kernel

Escribe obj.inspect a la salida estándar.

Debido a que el objeto se mezcla en el módulo Kernel, el método p() está disponible en todas partes.

Es común, por cierto, usarlo en modo poesía , lo que significa que los parens se eliminan. El fragmento de código CSV se puede escribir como ...

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

Está documentado aquí con el resto del módulo Kernel .

Estoy seguro de que es una pregunta tonta para los que saben, pero no puedo encontrar una explicación de lo que hace o lo que es.

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

¿Qué hace " p row "?


¿Por qué no intentarlo?

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



La otra opción para la documentación que ya tiene en su sistema es el comando ri . En cualquier momento puede escribir: ri p o si p está definido en muchos lugares (lo que es) para los comandos centrales, puede probar ri Kernel.p . Otras buenas apuestas son Array.<whatever method> o String.<whatever method> .

Si terminas instalando un montón de gemas, esto se ralentizará mucho, pero puedes buscar la gema fastri que acelera el proceso de búsqueda increíblemente.


Para comprender la diferencia entre p y puts, debe comprender la diferencia entre los métodos to_s () y instance ().

to_s se usa para obtener una representación de cadena de un objeto, mientras que la instance es una versión más amigable para el desarrollador de to_s que también proporciona contenido de los objetos.

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">


Kernel#p es el pequeño hermano de debugging de Kernel#puts : funciona más o menos exactamente igual que él, pero convierte sus argumentos usando #inspect lugar de #to_s .

La razón por la que tiene un nombre tan críptico es para que pueda lanzarlo rápidamente en una expresión y eliminarlo de nuevo cuando realice la depuración. (Supongo que es mucho menos útil ahora que Ruby está mejorando y mejorando el soporte de depuración "adecuado").

Algunas alternativas al Kernel#p son Kernel#pp (impresión bonita) de la biblioteca estándar de pp y Kernel#y (YAML) de la biblioteca estándar de yaml .