self
и inspect
не имеют особых отношений - так получилось, что учебник "Ruby koans", который вы используете, учит вас обоим одновременно.
self
- это ключевое слово, которое внутри метода оценивает объект, для которого вы вызвали метод.
inspect
- это метод, реализованный всеми объектами, который возвращает строковое представление объекта. to_s
также возвращает строковое представление объекта.
Разница в том, что строка, возвращаемая inspect
, обычно, если возможно, имитирует синтаксис Ruby, который может создать эквивалентный объект. inspect
обычно используется для отладки. Строка, возвращаемая to_s
, обычно больше подходит для отображения конечному пользователю.
Синтаксис "# {expression}" неявно вызывает to_s
объекта, который получается в результате вычисления expression
.