Обратите внимание, что все это относится к каждой паре «коротких» (например, to_s
/ to_i
/ to_a
/ to_h
) против «long» (например, to_str
/ to_int
/ to_ary
/ to_hash
) в Ruby (для их соответствующих типов), поскольку все они имеют одинаковую семантику.
Они имеют разные значения. Вы не должны реализовывать to_str
, если ваш объект не действует , как строка, а не просто , представляемый строкой. Единственным основным классом, который реализует to_str
, является сама строка.
Из Programming Ruby (цитируется из в этом сообщении в блоге , в котором стоит прочитать все ):
[
blockquote>to_i
иto_s
] не являются особенно строгими: если у объекта есть какое-то достойное представление в виде строки, например, у него, вероятно, будетto_s
метод ... [to_int
иto_str
] являются строгими функциями преобразования: вы реализуете их только в том случае, если [ваш] объект может быть естественным образом использован в каждом месте, где может использоваться строка или целое число.Документация Older Ruby из файла Pickaxe гласит:
В отличие от
blockquote>to_s
, который поддерживается почти всеми классами,to_str
обычно реализуется только те классы, которые действуют как строки.Например, в дополнение к Integer оба Float & amp; Числовой реализует
to_int
(to_i
эквивалентto_str
), потому что оба они могут легко заменить Integer (все они фактически являются числами). Если ваш класс не имеет тесных отношений с String, вы не должны реализовыватьto_str
.