web-dev-qa-db-fra.com

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

Quand je crée un nouveau tableau/hachage dans irb, il imprime un format sympa pour montrer la structure, ex.

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

... mais quand j'essaie d'imprimer mes variables en utilisant puts, je les fais réduire:

value1
value2
value3
key1
value1

Je suppose que puts n'est pas la bonne commande pour ce que je veux, mais qu'est-ce que c'est? Je veux pouvoir voir mes variables dans irb dans le premier format, pas dans le second.

66
neezer

Vous pouvez soit utiliser la méthode inspect:

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

Ou, mieux encore, utilisez la bibliothèque pp (pretty print):

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

Une autre chose que vous pouvez faire est d'utiliser la méthode y qui convertit l'entrée en Yaml. Cela produit une sortie assez agréable ...

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

La jolie impression fonctionne bien, mais la gemme Awesome_Print est encore meilleure! Tu vas devoir 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 également l'inclure dans votre ~/.irbrc pour avoir ceci comme méthode par défaut pour afficher les objets:

require "awesome_print"
AwesomePrint.irb!
13
Chris

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"}
4
Gdeglin

Mon outil personnel de choix pour cela est 'Pretty Print' et la méthode pp

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