Вывод обрабатывается несколькими макросами
, которые определены в std::fmt
. Вот некоторые из них:
format!
: записывает форматированный текст в String
.print!
: работает аналогично с format!
, но текст выводится в консоль.println!
: аналогично print!
, но в конце добавляется переход на новую строку.Весь текст обрабатывается аналогичным образом. Плюс данного метода в том, что корректность форматирования будет проверена на этапе комплиции программы.
fn main() { // `{}` автоматически будет заменено на // аргументы. Они будут преобразованы в строку. println!("{} days", 31); // Без суффиксов, 31 является i32. Можно изменить тип 31, // используя суффикс. // Существует множество способов работы с форматированным выводом. Можно указать // позицию для каждого аргумента. println!("{0}, this is {1}. {1}, this is {0}", "Alice", "Bob"); // Так же можно именовать аргументы. println!("{subject} {verb} {object}", object="the lazy dog", subject="the quick brown fox", verb="jumps over"); // Специальное форматирование может быть определено после `:`. println!("{} of {:b} people know binary, the other half don't", 1, 2); // Можно выравнивать текст, сдвигая его на указанную ширину. // Данный макрос отобразит в консоли // " 1". 5 пробелов и "1". println!("{number:>width$}", number=1, width=6); // Можно добавить к цифрам пару нулей. Данный макрос выведет "000001". println!("{number:>0width$}", number=1, width=6); // Компилятор обязательно проверит, что в макрос передано правильное количество // аргументов. println!("My name is {0}, {1} {0}", "Bond"); // ИСПРАВЬТЕ ^ Добавьте недостающий аргумент: "James" // Создаем структуру, которая хранит в себе `i32`. Назовем ее `Structure`. #[allow(dead_code)] struct Structure(i32); // Однако, пользовательские типы данных, например, как эта структура // требуют более сложной обработки для вывода. Данный код не будет работать. println!("This struct `{}` won't print...", Structure(3)); // ИСПРАВЬТЕ ^ Закоментируйте эту строку. }
std::fmt
содержит в себе много типажей (traits)
, которые управляют
отображением текста. Базовая форма двух самых важных рассмотрена ниже:
fmt::Debug
: Использует {:?}
marker. Форматирует текст для отладочных целей.fmt::Display
: Использует {}
marker. Форматирует текст в более элегантном,
удобном для пользователя стиле.В данном примере используется fmt::Display
, потому что стандартная библиотека предоставляет реализацию для данного типа. Для отображения собственных типов потребуется больше дополнительных шагов.
ИСПРАВЬТЕ
), чтобы код
комплировался без ошибокprintln!
, который выводит: Pi is roughly 3.142
c помощью
управления количеством знаков после запятой. Для выполнения данного задания создайте
переменную, которая будет хранить в себе значение числа Пи: let pi = 3.141592
.
(Подсказка: вам необходимо ознакомиться с документация по
std::fmt
, чтобы узнать,
как отобразить только часть знаков после запятой в консоли.)