Первое, что делает Ruby, когда видит строку в двойных кавычках, заменяет части #{expr}
результатом вычисления expr
.Например, "#{2+2}"
становится "4"
.Итак, давайте посмотрим, что здесь происходит.Ruby оценивает teet.printsomething
.Во время этой оценки он выполняет метод и печатает «lol» в 3-й строке.Обратите внимание, что хотя метод printsomething
не имеет оператора return
, он, тем не менее, возвращает некоторое значение: это значение, возвращаемое последним оператором этого метода.Возвращаемое значение p object
само по себе object
, поэтому результат метода printsomething
равен "lol"
.Этот результат теперь заменяет часть #{}
в строке, и строка становится "lol"
вместо "#{teet.printsomething}"
.Теперь метод p
в 7-й строке выполняется и снова выдает «lol».
Что произойдет, если вы замените p
на puts
?Разница в том, что возвращаемое значение puts
равно nil
.Когда результат expr
равен nil
, все выражение #{}
заменяется пустой строкой.Таким образом, 7-я строка становится puts ""
.В результате вся программа выдает «lol», за которым следует пустая строка.