Ruby: Comment faire la structure d'impression IRB pour des tableaux et hachages
Question
Quand je fais un nouveau tableau / hachage irb , il imprime un format agréable de montrer la structure, ex.
["value1", "value2", "value3"]
{"key1" => "value1"}
... mais lorsque je tente d'imprimer mes variables à l'aide puts
, je les ai effondrés:
value1
value2
value3
key1
value1
Je crois que puts
n'est pas la bonne commande pour ce que je veux, mais ce qui est? Je veux être en mesure d'afficher mes variables irb dans le premier format, pas le second.
La solution
Vous pouvez utiliser la méthode inspect
:
a=["value1", "value2", "value3"]
puts a.inspect
Ou, mieux encore, utilisez les pages (pretty print) lib:
require 'pp'
a=["value1", "value2", "value3"]
pp a
Autres conseils
Une autre chose que vous pouvez faire est d'utiliser la méthode y
qui convertit l'entrée en YAML. Ce produit 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
La jolie impression fonctionne bien, mais la pierre précieuse Awesome_Print est encore mieux! Vous devrez require awesome_print
mais il gère hash imbriqués et les tableaux eux magnifiquement couleurs plus dans le terminal en utilisant « ap » au lieu de « p » pour met la sortie.
Vous pouvez également inclure dans votre ~ / .irbrc d'avoir cela comme la méthode par défaut pour l'affichage des objets:
require "awesome_print"
AwesomePrint.irb!
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"}
Mon outil personnel de choix pour c'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"]}