Вывод обрабатывается несколькими макросами, которые определены в 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, чтобы узнать,
как отобразить только часть знаков после запятой в консоли.)