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

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

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

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

value1
value2
value3
key1
value1

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

require "awesome_print"
AwesomePrint.irb!

Попробуйте . осмотрите

>> 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"}

Мой личный инструмент выбора для этого - "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"]} 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top