Одиночные элементы имеют свое использование, но нужно быть осторожным в использовании и представлении их, потому что они слишком легки для злоупотребления , трудный к действительно модульному тесту, и легко создать круговые зависимости на основе двух одиночных элементов что доступы друг друга.
Это полезно однако, поскольку, когда Вы хотите быть уверенными, что все Ваши данные синхронизируются через несколько экземпляров, например, конфигурации для распределенного приложения, например, могут полагаться на одиночные элементы, чтобы удостовериться, что все соединения используют тот же актуальный набор данных.
Хорошая печать объектов по умолчанию в irb - это именно то, для чего был создан hirb . Эти сообщения объясняют, как hirb может преобразовать почти все в таблицу ascii. Хотя предполагается, что hirb настраивается для каждого класса, вы можете отображать все объекты в виде таблиц:
# put this in ~/.irbrc
require 'rubygems'
require 'hirb'
Hirb.enable :output=>{'Object'=>{:class=>:auto_table, :ancestor=>true}}
# in irb
>> %w{three blind mice}
+-------+
| value |
+-------+
| three |
| blind |
| mice |
+-------+
3 rows in set
>> 1..5
+-------+
| value |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+-------+
5 rows in set
>> {:a=>1, :b=>2}
+---+---+
| 0 | 1 |
+---+---+
| a | 1 |
| b | 2 |
+---+---+
2 rows in set
Это связанное решение переполнения также имеет пример работы hirb.
при запуске irb читает .irbrc из вашего каталога $ HOME. Если вы отредактируете (или создадите) этот файл и добавите
require 'pp'
, он будет загружаться каждый раз при запуске irb.
Посмотрите это дополнение в списки методов pretty_print. Добавьте это в свой .irbrc, и вы можете сделать:
>> 5.pm
%(arg1) Fixnum
&(arg1) Fixnum
*(arg1) Fixnum
**(arg1) Fixnum
+(arg1) Fixnum
+@() Fixnum(Numeric)
-(arg1) Fixnum
-@() Fixnum
/(arg1) Fixnum
<<(arg1) Fixnum
>>(arg1) Fixnum
[](arg1) Fixnum
^(arg1) Fixnum
abs() Fixnum
ago(arg1, ...) Fixnum(ActiveSupport::CoreExtensions::Numeric::Time)
between?(arg1, arg2) Fixnum(Comparable)
byte() Fixnum(ActiveSupport::CoreExtensions::Numeric::Bytes)
bytes() Fixnum(ActiveSupport::CoreExtensions::Numeric::Bytes