Ответ 1
Ruby поддерживает строки формата, как и многие другие языки:
[11] (pry) main: 0> '%3.3s' % 'f' => " f" [12] (pry) main: 0> '%3.3s' % 'foo' => "foo" [13] (pry) main: 0> '%3.3s' % 'foobar' => "foo"
Если вы хотите поместить справа, используйте -
в строке формата:
[14] (pry) main: 0> '%-3.3s' % 'f' => "f " [15] (pry) main: 0> '%-3.3s' % 'foo' => "foo" [16] (pry) main: 0> '%-3.3s' % 'foobar' => "foo"
Вы также можете использовать printf
или sprintf
, но я предпочитаю более общий %
, который похож на sprintf
.
Из sprintf
docs:
s | Argument is a string to be substituted. If the format | sequence contains a precision, at most that many characters | will be copied.
и
- | all | Left-justify the result of this conversion.
Что делать, если я хочу использовать не пробелы, а какой-то другой символ?
Базовый код Ruby написан на C, и он жестко закодирован для использования ' '
в качестве символа прокладки, так что это невозможно сразу, если вы не хотите изменять источник, перекомпилировать свой Ruby и жить с одним - версия версии языка. Вместо этого вы можете сделать что-то вроде:
[17] (pry) main: 0> ('%-3.3s' % 'f').gsub(' ', '.') => "f.."
Это намного сложнее, чем просто gsub
. Часто лучше настроить строку без использования форматированных строк, если вам нужно указать специальные символы. Строки формата очень мощные, но они не являются полностью гибкими.
В противном случае я бы пошел с чем-то вроде решения @steenslag, которое станет основой для вашего собственного. Вы теряете возможность использовать строки форматирования и должны полагаться на конкатенирование строк или что-то подобное, чтобы получить столбчатый вывод, но он также будет работать.