Ruby: Como fazer com que a estrutura de impressão IRB para matrizes e hashes
Pergunta
Quando faço uma nova matriz / hash em irb , ele imprime um bom formato para mostrar a estrutura, ex.
["value1", "value2", "value3"]
{"key1" => "value1"}
... mas quando tento imprimir meus variáveis ??usando puts
, eu levá-los em colapso:
value1
value2
value3
key1
value1
Percebi que puts
não é o comando certo para o que eu quero, mas o que é? Eu quero ser capaz de ver meus variáveis ??em irb no primeiro formato, não o segundo.
Solução
Você pode usar o método inspect
:
a=["value1", "value2", "value3"]
puts a.inspect
Ou, melhor ainda, usar o pp (impressão bonita) lib:
require 'pp'
a=["value1", "value2", "value3"]
pp a
Outras dicas
Outra coisa que você pode fazer é usar o método y
que converte a entrada em YAML. Que produz bastante saída agradável ...
>> data = { 'dog' => 'Flemeale', 'horse' => 'Gregoire', 'cow' => 'Fleante' }
=> {"cow"=>"Fleante", "horse"=>"Gregoire", "dog"=>"Flemeale"}
>> y data
---
cow: Fleante
horse: Gregoire
dog: Flemeale
A cópia bonita funciona bem, mas o Awesome_Print gem é ainda melhor! Você terá que require awesome_print
mas ele lida com hashes e arrays lindamente aninhados mais cores-los no terminal usando 'ap' em vez de 'p' para puts a saída.
Você também pode incluí-lo em seu ~ / .irbrc ter isso como o método padrão para a exibição de objetos:
require "awesome_print"
AwesomePrint.irb!
Tente .inspect
>> a = ["value1", "value2", "value3"]
=> ["value1", "value2", "value3"]
>> a.inspect
=> "[\"value1\", \"value2\", \"value3\"]"
>> a = {"key1" => "value1"}
=> {"key1"=>"value1"}
>> a.inspect
=> "{\"key1\"=>\"value1\"}"
Você também pode usar o método p () para imprimi-los:
>> p a
{"key1"=>"value1"}
Meu ferramenta pessoal de escolha para isso é 'Pretty Print' eo 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"]}