44 votes

Qu'est-ce que "p" en Ruby?

Je suis sûr que c’est une question idiote pour ceux qui savent, mais je ne trouve pas d’explication sur ce que cela fait ou ce que c’est.

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

Que fait " p row "?

80voto

DigitalRoss Points 80400

p() est un Noyau qui écrit obj.inspect sur la sortie standard.

Parce que l'Objet de mélange dans le module du Noyau, l' p() méthode est disponible partout. Il est courant d'utiliser dans la poésie de mode, ce qui signifie que les parens sont supprimés. (J'aime la poésie de mode, par exemple un fichier CSV extrait peut être écrit sans l'aide de parenthèses pour l' open appel.)

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

Pour trouver les docs pour cela, rendez-vous à http://www.ruby-doc.org/core-1.8.7/index.html et de regarder pour l' p méthode dans la main droite colonne de navigation.

22voto

Jörg W Mittag Points 153275

Kernel#p est le peu de débogage frère de Kernel#puts:- il plus ou moins fonctionne exactement comme elle, mais il convertit ses arguments à l'aide de #inspect au lieu de #to_s.

La raison pourquoi il a un tel nom cryptique est de sorte que vous pouvez rapidement lancer dans une expression et de prendre de nouveau lors du débogage. (Je suppose que c'est beaucoup moins utile maintenant que Ruby est de mieux en mieux et de meilleure qualité "bonne" prise en charge du débogage.)

Certaines solutions de rechange à l' Kernel#p sont Kernel#pp (pretty print) de l' pp bibliothèque standard et Kernel#y (YAML) de l' yaml de la bibliothèque standard.

5voto

rfunduk Points 15267

Pourquoi ne pas l'essayer?

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

2voto

Chuck Vose Points 3235

L'autre option pour la documentation que vous avez déjà sur votre système est l' ri commande. À tout moment, vous pouvez taper: ri p ou si p est défini dans beaucoup d'endroits (ce qui est) pour le centre de commandes, vous pouvez essayer d' ri Kernel.p. D'autres bons paris sont Array.<whatever method> ou String.<whatever method>.

Si vous finissez par l'installation d'un tas de pierres précieuses, cela va ralentir beaucoup, mais vous pouvez consulter les fastri gem, ce qui accélère le processus de recherche incroyablement.

1voto

Don Points 1

Le noyau # p est moins connu que print et met.

Cela ressemble à une insertion car elle ajoute une nouvelle ligne, mais plutôt que d'appeler to_s, p appelle inspect.

Références

http://garethrees.co.uk/2013/05/04/p-vs-puts-vs-print-in-ruby/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X