Ruby: Como fazer com que a estrutura de impressão IRB para matrizes e hashes

StackOverflow https://stackoverflow.com/questions/703049

  •  22-08-2019
  •  | 
  •  

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.

Foi útil?

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"]} 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top