с методом все четко, иммутабельные не меняют свой id, мутабельные меняют. похоже, что руби отбивает память под метов, но для иммутабельных строк у него какая-то общая таблица и и он на нее ссылается
каждый пример выведет нужную строку, но второй правильнее — у него единственная обязанность (сформировать строку приветствия). а первый вариант ее формирует, а потом еще и выводит
в руби из метода всегда возвращается результат последней операции. в моем первом примере это puts, этот вызов возвращает nil. а второй пример возвращает объявленную строку