В Ruby, как и в языке С, для этой цели предназначен метод sprintf. Он принимает строку и список выражений, а возвращает строку. Набор спецификаторов в форматной строке мало чем отличается от принятого в функции sprintf (или printf)из библиотеки С.
name = "Боб"
age =28
str = sprintf("Привет, %s... Похоже, тебе %d лет.", name, age)
Спрашивается, зачем нужен этот метод, если можно просто интерполировать
значения в строку с помощью конструкции # {ехрг} ? А затем, что sprint f позволяет выполнить дополнительное форматирование - например, задать максимальную ширину поля или максимальное число цифр после запятой, добавить
или подавить начальные нули, выровнять строки текста по левой или правой
границе и т.д.
str = sprintf("%-20s %3d", name, age)
В классе string есть еще метод %, который делает почти то же самое. Он принимает одно значение или массив значений любых типов:
str = "%-20s %3d" % [name, age] # To же, что и выше
Имеются также методы ljust, rjust и center; они принимают длину результирующей строки и дополняют ее до указанной длины пробелами, если это необходимо.
str = "Моби Дик"
si = str.ljust(12) # "Моби Дик"
s2 = str.center(12) # " Моби Дик "
s3 = str.rjust(12) # " Моби Дик"
Можно задать и второй параметр, который интерпретируется как строка заполнения
(при необходимости она будет урезана):
str = "Капитан Ахав"
si = str.ljust(20,"+") # "Капитан Ахав++++++++"
s2 = str.center(20) # "—Капитан Ахав—"
s3 = str.rjust(20,"123") # "12312312Капитан Ахав"
