#{ x.times... } в двойных кавычках было развернуто в первую очередь, ну а там внутри -- print, как было его не вызвать. Отсюда восклицательные знаки перед Hello.#{ ... } возвращает последнее вычисленное значение (результат вызова x.times { ... }, в данном случае), поэтому после вывода восклицательных знаков и строчки Hello интерпретатор подставил вместо выражения результат его вычисления.