Трейт Default

Трейт Default створює значення за замовчуванням для типу.

#[derive(Debug, Default)]
struct Derived {
    x: u32,
    y: String,
    z: Implemented,
}

#[derive(Debug)]
struct Implemented(String);

impl Default for Implemented {
    fn default() -> Self {
        Self("John Smith".into())
    }
}

fn main() {
    let default_struct = Derived::default();
    println!("{default_struct:#?}");

    let almost_default_struct =
        Derived { y: "Y встановлено!".into(), ..Derived::default() };
    println!("{almost_default_struct:#?}");

    let nothing: Option<Derived> = None;
    println!("{:#?}", nothing.unwrap_or_default());
}
This slide should take about 5 minutes.
  • Це може бути реалізовано безпосередньо або може бути отримано за допомогою #[derive(Default)].
  • Похідна реалізація створить значення, в якому всі поля мають значення за замовчуванням.
    • Це означає, що всі типи в структурі також мають реалізовувати Default.
  • Стандартні типи Rust часто реалізують Default із прийнятними значеннями (наприклад, 0, "" тощо).
  • Часткова ініціалізація структур чудово працює за замовчуванням.
  • Стандартна бібліотека Rust усвідомлює, що типи можуть реалізовувати Default і надає зручні методи, які його використовують.
  • Синтаксис .. називається синтаксис оновлення структури.