Трейт Display
Трейт Display из модуля std::fmt
задает пользовательское текстовое представление типа.
Он используется в фигурных скобках {}
в макросах форматирования, таких как println!,
print!, format! и других.
Реализуя этот трейт, вы указываете, как ваш тип
должен выглядеть при выводе. Метод fmt
принимает ссылку на Formatter и возвращает
fmt::Result.
Синтаксис
use std::fmt;
impl fmt::Display for TypeName
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result
{
// implementation
}
}
Пример
Давайте реализуем трейт Display для
структуры Point и выведем ее через
println!:
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)
Пример
Давайте реализуем трейт Display для
перечисления Color и выведем его значения:
use std::fmt;
enum Color
{
Red,
Green,
Blue,
}
impl fmt::Display for Color
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result
{
match self
{
Color::Red => write!(f, "Red"),
Color::Green => write!(f, "Green"),
Color::Blue => write!(f, "Blue"),
}
}
}
fn main()
{
let c = Color::Green;
println!("{}", c);
}
Результат выполнения кода:
"Green"
Пример
Давайте используем трейт Display
для форматирования с выравниванием по ширине:
use std::fmt;
struct Wrapper(String);
impl fmt::Display for Wrapper
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result
{
write!(f, "{}", self.0)
}
}
fn main()
{
let w = Wrapper(String::from("abcde"));
println!("[{:>10}]", w);
println!("[{:<10}]", w);
}
Результат выполнения кода:
[ abcde]
[abcde ]