Вот статья , которая пытается ответить на ваш вопрос, но, на мой взгляд, на самом деле не удается.
Примерно в то же время Pathname#to_str
было удалено Exception#to_str
было также удалено - ясно, что в это время Мэтц пытался нарисовать линию на песке между "строковым" и "нестроковым" "классы. Изменение Exception
имеет смысл - исключение, если использовать ваши слова, «не может быть без потерь преобразовано в строку и обратно», потому что объект исключения содержит много другой информации - в частности, трассировки стека - которая будет потерял в этом преобразовании.
Я могу только догадываться, но держу пари, что Матц чувствовал то же самое по отношению к Pathname
, хотя неясно, почему. Даже в документации (1.9.3) в какой-то момент говорится (в разделе «Основные методы»): «Эти методы эффективно манипулируют строкой, потому что это все путь». Несколько источников, которые я нашел - в дополнение к одному из @MarkThomas, цитирует - используют Pathname
в качестве примера класса, для которого to_str
действительно имеет смысл, вероятно, принимая реплику от Хэла Фултона Рубиновый Путь .
Полагаю, это не очень удовлетворительный ответ. Если вы действительно хотите знать, вам может потребоваться Ruby-Talk или Ruby-Core . Вы можете попробовать спросить Матца [в Твиттере] (Юкихиро Мацумото), но он, кажется, разговаривает исключительно на японском языке. Wycats и Джереми Кемпер может иметь немного больше понимания, и может показаться довольно доступным. Удачи!
P.S. В этой статье есть раздел "Техническое объяснение to_str
и друзей", который мне показался интересным, но это не делает ничего лучше, чем отвечать на ваш вопрос.