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

Quand je crée un nouveau tableau / hash dans irb , il affiche un bon format pour montrer la structure, ex.

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

… mais quand j’essaie d’imprimer mes variables en utilisant des puts , je les récupère:

 value1 value2 value3 key1 value1 

Je suppose que ce 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 le second.

Vous pouvez soit utiliser la méthode inspect :

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

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

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

Vous pouvez également utiliser la méthode y qui convertit les entrées en Yaml. Cela produit une très belle sortie …

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

La jolie copie fonctionne bien, mais le bijou Awesome_Print est encore meilleur! Vous devrez require awesome_print mais il gère require awesome_print les hachages et les tableaux nesteds et les colore dans le terminal en utilisant «ap» au lieu de «p» pour placer la sortie.

Vous pouvez également l’inclure dans votre ~ / .irbrc pour que cela soit la méthode par défaut pour afficher les objects:

 require "awesome_print" AwesomePrint.irb! 

Essayez

 >> 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:

 >> pa {"key1"=>"value1"} 

Mon outil de prédilection 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"]}