Ruby: Как сделать структуру печати IRB для массивов и хэшей - PullRequest
65 голосов
/ 01 апреля 2009

Когда я создаю новый массив / хэш в irb , он выводит хороший формат для отображения структуры, например.

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

... но когда я пытаюсь распечатать мои переменные, используя puts, я получаю их свернутыми:

value1
value2
value3
key1
value1

Я понимаю, что puts - не та команда, которая мне нужна, но что это? Я хочу иметь возможность просматривать мои переменные в irb в первом формате, а не во втором.

Ответы [ 5 ]

114 голосов
/ 01 апреля 2009

Вы можете использовать метод inspect:

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

Или, что еще лучше, используйте pp (pretty print) lib:

require 'pp'
a=["value1", "value2", "value3"]
pp a
53 голосов
/ 15 июля 2009

Другая вещь, которую вы можете сделать, это использовать метод y, который преобразует ввод в Yaml. Это дает довольно хороший результат ...

>> data = { 'dog' => 'Flemeale', 'horse' => 'Gregoire', 'cow' => 'Fleante' }
=> {"cow"=>"Fleante", "horse"=>"Gregoire", "dog"=>"Flemeale"}
>> y data
--- 
cow: Fleante
horse: Gregoire
dog: Flemeale
13 голосов
/ 20 февраля 2012

Красивый принт работает хорошо, но самоцвет Awesome_Print еще лучше! Вам нужно будет require awesome_print, но он прекрасно обрабатывает вложенные хэши и массивы, а также раскрашивает их в терминале, используя 'ap' вместо 'p', чтобы поместить вывод.

Вы также можете включить его в ~ / .irbrc, чтобы использовать его как метод отображения объектов по умолчанию:

require "awesome_print"
AwesomePrint.irb!
4 голосов
/ 01 апреля 2009

Попробуйте .inspect

>> a = ["value1", "value2", "value3"]
=> ["value1", "value2", "value3"]
>> a.inspect
=> "[\"value1\", \"value2\", \"value3\"]"
>> a = {"key1" => "value1"}
=> {"key1"=>"value1"}
>> a.inspect
=> "{\"key1\"=>\"value1\"}"

Вы также можете использовать метод p () для их печати:

>> p a
{"key1"=>"value1"}
3 голосов
/ 07 января 2012

Мой личный инструмент для выбора - «Pretty Print» и метод pp

require 'pp' # <- 'Pretty Print' Included in ruby standard library
pp({ :hello => :world, :this => ['is', 'an', 'array'] })
=> {:hello=>:world, :this=>["is", "an", "array"]} 
...