Исследование impl Display в Rust

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, сделав их более удобными в сопровождении и использовании.

Черта: подробное руководство по форматированию вывода”