68 votes

Ruby : Comment créer une structure d'impression IRB pour les tableaux et les hachages ?

Lorsque je crée un nouveau tableau/hash dans irb il imprime un format agréable pour montrer la structure, par exemple.

["value1", "value2", "value3"]
{"key1" => "value1"}

... mais lorsque j'essaie d'imprimer mes variables à l'aide de la fonction puts je les ai fait s'effondrer :

value1
value2
value3
key1
value1

J'en déduis que puts n'est pas la bonne commande pour ce que je veux, mais qu'est-ce qui l'est ? Je veux être capable de visualiser mes variables en irb dans le premier format, pas dans le second.

118voto

dmondark Points 1011

Vous pouvez soit utiliser le inspect méthode :

a=["value1", "value2", "value3"]
puts a.inspect

Ou, mieux encore, utilisez la librairie pp (pretty print) :

require 'pp'
a=["value1", "value2", "value3"]
pp a

55voto

Ethan Points 13856

Une autre chose que vous pouvez faire est d'utiliser le y qui convertit l'entrée en Yaml. Cela produit une belle sortie...

>> data = { 'dog' => 'Flemeale', 'horse' => 'Gregoire', 'cow' => 'Fleante' }
=> {"cow"=>"Fleante", "horse"=>"Gregoire", "dog"=>"Flemeale"}
>> y data
--- 
cow: Fleante
horse: Gregoire
dog: Flemeale

13voto

Chris Points 3445

Le joli imprimé fonctionne bien, mais le Impression impressionnante La pierre précieuse est encore meilleure ! Vous devrez require awesome_print mais il gère magnifiquement les hachages et les tableaux imbriqués et les colore dans le terminal en utilisant 'ap' au lieu de 'p' pour mettre la sortie.

Vous pouvez aussi l'inclure dans votre ~/.irbrc pour que ce soit la méthode par défaut pour afficher les objets :

require "awesome_print"
AwesomePrint.irb!

6voto

Gdeglin Points 6687

Essayez .inspect

>> a = ["value1", "value2", "value3"]
=> ["value1", "value2", "value3"]
>> a.inspect
=> "[\"value1\", \"value2\", \"value3\"]"
>> a = {"key1" => "value1"}
=> {"key1"=>"value1"}
>> a.inspect
=> "{\"key1\"=>\"value1\"}"

Vous pouvez également utiliser la méthode p() pour les imprimer :

>> p a
{"key1"=>"value1"}

3voto

jacobsimeon Points 759

Mon outil personnel de prédilection pour ce faire est "Pretty Print" et la fonction pp méthode

require 'pp' # <- 'Pretty Print' Included in ruby standard library
pp({ :hello => :world, :this => ['is', 'an', 'array'] })
=> {:hello=>:world, :this=>["is", "an", "array"]}

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