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.¿Qué es "p" en Ruby?
CSV.open('data.csv', 'r') do |row|
p row
end
¿Qué significa "p row
" do?
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.¿Qué es "p" en Ruby?
CSV.open('data.csv', 'r') do |row|
p row
end
¿Qué significa "p row
" do?
p()
es un método KernelSe escribe obj.inspect
a la salida estándar.
porque el objeto se mezcla en el módulo del kernel, el método p()
está disponible en todas partes.
Es común, por cierto, usarlo en el modo de poesía , lo que significa que los parens se descartan. El fragmento CSV se puede escribir como ...
CSV.open 'data.csv', 'r' do |row|
p row
end
se documenta here with the rest of the Kernel módulo.
Kernel#p
es el hermano pequeño de depuración Kernel#puts
: más o menos funciona exactamente igual, pero Convierte sus argumentos usando #inspect
en lugar de #to_s
.
La razón por la que tiene un nombre tan críptica es por lo que se puede tirar rápidamente en una expresión y llevarlo de nuevo al depurar. (Supongo que es mucho menos útil ahora que Ruby es cada vez mejor y mejor soporte de depuración "correcta".)
Algunas alternativas a Kernel#p
son Kernel#pp
(impresión bonita) de la biblioteca estándar pp
y Kernel#y
(YAML) de la yaml
biblioteca estándar.
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 se define p
en muchos lugares (lo cual es) para comandos centrales, puede intentar ri Kernel.p
. Otras buenas apuestas son Array.<whatever method>
o String.<whatever method>
.
Si al final de la instalación de un montón de gemas este se ralentizará mucho, pero se puede buscar la joya fastri lo que acelera el proceso de búsqueda increíblemente.
Kernel # p es menos conocido que el de impresión y pone.
Es similar a pone en que se añade una nueva línea, pero en lugar de llamar to_s, p llamadas inspeccionar.
Referencias
http://garethrees.co.uk/2013/05/04/p-vs-puts-vs-print-in-ruby/
Para entender la diferencia entre P y pone, que deben entender la diferencia entre to_s() y la instancia() métodos.
to_s se utiliza para obtener la representación de cadena de un objeto, mientras que instance es una versión más amigable para desarrolladores de to_s que también proporciona el 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">
+1 para agregar el enlace al documento – edwardsmatt
El enlace directo a los documentos para p - http://www.ruby-doc.org/core-1.8.7/Kernel.html#method-i-p – Joe