Trait: подробное руководство по форматированию вывода”
В Rust признак Displayиспользуется для управления форматированием объекта как строки. Он предоставляет возможность настроить вывод при использовании макроса println!, преобразовании объекта в строку или в любой другой ситуации, когда требуется форматированное строковое представление. В этой статье мы рассмотрим различные методы реализации признака Displayна примерах кода.
Метод 1: реализация типажа Displayдля структуры
struct Person {
    name: String,
    age: u32,
}
impl std::fmt::Display for Person {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "Name: {}, Age: {}", self.name, self.age)
    }
}
fn main() {
    let person = Person {
        name: String::from("John Doe"),
        age: 30,
    };
    println!("{}", person);
}Метод 2. Реализация признака Displayдля перечисления
enum Status {
    Success,
    Error(String),
}
impl std::fmt::Display for Status {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Status::Success => write!(f, "Success"),
            Status::Error(msg) => write!(f, "Error: {}", msg),
        }
    }
}
fn main() {
    let success = Status::Success;
    let error = Status::Error(String::from("Something went wrong"));
    println!("{}", success);
    println!("{}", error);
}Метод 3: реализация признака Displayдля пользовательского типа с параметрами форматирования
struct Temperature(f64);
impl std::fmt::Display for Temperature {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{:.2} °C", self.0)
    }
}
fn main() {
    let temperature = Temperature(25.6789);
    println!("{}", temperature);
}Метод 4. Реализация признака Displayдля типа коллекции
use std::fmt;
struct ShoppingCart {
    items: Vec<String>,
}
impl fmt::Display for ShoppingCart {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        for item in &self.items {
            writeln!(f, "- {}", item)?;
        }
        Ok(())
    }
}
fn main() {
    let cart = ShoppingCart {
        items: vec![
            String::from("Item 1"),
            String::from("Item 2"),
            String::from("Item 3"),
        ],
    };
    println!("{}", cart);
}В этой статье мы рассмотрели различные методы реализации трейта Displayв Rust. Мы увидели, как настроить строковое представление для структур, перечислений, пользовательских типов с параметрами форматирования и типов коллекций. Понимание и использование признака Displayпозволяет вам полностью контролировать форматирование ваших объектов при преобразовании в строки. Реализуя признак Display, вы можете обеспечить осмысленное и удобочитаемое представление ваших данных.
Используя эти методы, вы можете улучшить читабельность и удобство использования ваших программ на Rust, сделав их более удобными в сопровождении и использовании.
Черта: подробное руководство по форматированию вывода”