Ruby: ¿Cómo hacer que la estructura de impresión IRB para arrays y hashes
Pregunta
Cuando hago una nueva matriz / hachís en IRB , imprime un formato agradable para mostrar la estructura, ej.
["value1", "value2", "value3"]
{"key1" => "value1"}
... pero cuando trato de imprimir mis variables utilizando puts
, los consigo colapsaron:
value1
value2
value3
key1
value1
Deduzco que puts
no es el comando correcto para lo que yo quiero, sino lo que es? Quiero ser capaz de ver las variables en IRB en el primer formato, no el segundo.
Solución
También se puede usar el método inspect
:
a=["value1", "value2", "value3"]
puts a.inspect
O, mejor aún, utilizar el lib pp (impresión bonita):
require 'pp'
a=["value1", "value2", "value3"]
pp a
Otros consejos
Otra cosa que puede hacer es utilizar el método y
el cual convierte la entrada en Yaml. Eso produce bastante agradable de salida ...
>> data = { 'dog' => 'Flemeale', 'horse' => 'Gregoire', 'cow' => 'Fleante' }
=> {"cow"=>"Fleante", "horse"=>"Gregoire", "dog"=>"Flemeale"}
>> y data
---
cow: Fleante
horse: Gregoire
dog: Flemeale
La impresión bonita funciona bien, pero el Awesome_Print joya es aún mejor! Tendrá que require awesome_print
pero maneja los hashes y arrays anidados muy bien, además de ellos colores en el terminal usando 'ap' en lugar de 'p' a pone la salida.
También puede incluirlo en su ~ / .irbrc tener esto como el método predeterminado para la visualización de objetos:
require "awesome_print"
AwesomePrint.irb!
Trate .inspect
>> a = ["value1", "value2", "value3"]
=> ["value1", "value2", "value3"]
>> a.inspect
=> "[\"value1\", \"value2\", \"value3\"]"
>> a = {"key1" => "value1"}
=> {"key1"=>"value1"}
>> a.inspect
=> "{\"key1\"=>\"value1\"}"
También puede utilizar el método de p () para imprimirlos:
>> p a
{"key1"=>"value1"}
Mi herramienta personal de elección para esto es 'Pretty Print' y el método pp
require 'pp' # <- 'Pretty Print' Included in ruby standard library
pp({ :hello => :world, :this => ['is', 'an', 'array'] })
=> {:hello=>:world, :this=>["is", "an", "array"]}