Sono sicuro che è una domanda sciocca per coloro che sanno, ma non riesco a trovare una spiegazione di cosa fa o di cosa si tratta.Che cos'è "p" in Ruby?
CSV.open('data.csv', 'r') do |row|
p row
end
Cosa fa "p row
"?
Sono sicuro che è una domanda sciocca per coloro che sanno, ma non riesco a trovare una spiegazione di cosa fa o di cosa si tratta.Che cos'è "p" in Ruby?
CSV.open('data.csv', 'r') do |row|
p row
end
Cosa fa "p row
"?
p()
è un metodo KernelScrive obj.inspect
sullo standard output.
Poiché l'oggetto si mescola nel modulo Kernel, il metodo p()
è disponibile ovunque.
È comune, btw, usarlo in in modalità poesia, il che significa che i paren vengono eliminati. Il frammento di CSV può essere scritto come ...
CSV.open 'data.csv', 'r' do |row|
p row
end
E 'documentato modulo here with the rest of the Kernel.
Kernel#p
è il fratello minore di debug di Kernel#puts
: più o meno funziona come esattamente, ma converte i suoi argomenti utilizzando #inspect
invece di #to_s
.
Il motivo per cui ha un nome così criptico è che puoi lanciarlo rapidamente in un'espressione e rimuoverlo di nuovo durante il debug. (Credo che sia molto meno utile ora che Ruby è sempre meglio "corretto" supporto di debug.)
Alcune alternative a Kernel#p
sono Kernel#pp
(piuttosto di stampa) della libreria standard pp
e Kernel#y
(YAML) dal yaml
libreria standard.
L'altra opzione per la documentazione già presente nel sistema è il comando ri
. In qualsiasi momento puoi digitare: ri p
o se p
è definito in molti posti (che è) per i comandi centrali puoi provare ri Kernel.p
. Altre buone scommesse sono Array.<whatever method>
o String.<whatever method>
.
Se si finisce per installare un gruppo di gemme, questo rallenterà molto, ma è possibile cercare la gemma veloce che accelera incredibilmente il processo di ricerca.
Kernel # p è meno noto di print e puts.
È simile a puts in che aggiunge una nuova riga, ma anziché chiamare a_s, p chiama inspect.
Riferimenti
http://garethrees.co.uk/2013/05/04/p-vs-puts-vs-print-in-ruby/
per capire la differenza tra P e mette, è necessario comprendere differenza tra to_s() e l'istanza() metodi.
to_s viene utilizzato per ottenere la rappresentazione di stringa di un oggetto mentre instance è una versione più amichevole per gli sviluppatori di to_s che fornisce anche il contenuto degli oggetti.
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 per aggiungere il collegamento al documento – edwardsmatt
Il collegamento diretto ai documenti per p - http://www.ruby-doc.org/core-1.8.7/Kernel.html#method-i-p – Joe