РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
771 of 1245 menu

Тип Formatter

Тип Formatter представляет собой контекст форматирования, который передаётся в методы fmt трейтов Display и Debug. Он содержит информацию о параметрах форматирования: ширине, точности, выравнивании, заполнителе и используемом представлении. Через методы Formatter можно записывать отформатированные данные в выходной поток, а также запрашивать текущие настройки форматирования.

Синтаксис

impl fmt::Display for MyStruct { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{}", self.value) } }

Основные методы типа Formatter:

f.width() -> Option<usize> f.precision() -> Option<usize> f.align() -> Option<Alignment> f.fill() -> char f.sign_plus() -> bool f.alternate() -> bool f.debug_struct(name) -> DebugStruct f.debug_tuple(name) -> DebugTuple f.debug_list() -> DebugList f.debug_map() -> DebugMap f.debug_set() -> DebugSet

Пример

Давайте реализуем трейт Display для структуры и используем Formatter для записи значения:

use std::fmt; struct Point { x: i32, y: i32, } impl fmt::Display for Point { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "({}, {})", self.x, self.y) } } fn main() { let p = Point { x: 1, y: 2 }; println!("{}", p); }

Результат выполнения кода:

(1, 2)

Пример

Давайте используем методы width и precision для получения параметров форматирования:

use std::fmt; struct Value(i32); impl fmt::Display for Value { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let width = f.width().unwrap_or(0); let precision = f.precision().unwrap_or(0); write!(f, "width={}, precision={}, value={}", width, precision, self.0) } } fn main() { let v = Value(42); println!("{:10.5}", v); }

Результат выполнения кода:

width=10, precision=5, value=42

Пример

Давайте используем debug_struct для создания отладочного представления структуры:

use std::fmt; struct Point { x: i32, y: i32, } impl fmt::Debug for Point { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("Point") .field("x", &self.x) .field("y", &self.y) .finish() } } fn main() { let p = Point { x: 1, y: 2 }; println!("{:?}", p); }

Результат выполнения кода:

Point { x: 1, y: 2 }

Смотрите также

  • трейт Display,
    который использует Formatter для пользовательского вывода
  • трейт Debug,
    который использует Formatter для отладочного вывода
  • макрос format!,
    который создаёт строку с помощью форматирования
  • макрос write!,
    который записывает форматированные данные в поток
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить