Ruby: Как создать структуру печати IRB для массивов и хэшей - программирование

Ruby: Как создать структуру печати IRB для массивов и хэшей

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

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

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

value1
value2
value3
key1
value1

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

require "awesome_print"
AwesomePrint.irb!

Ответ 4

Попробуйте .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"}

Ответ 5

Мой личный инструмент выбора для этого - "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"]}