Трейт 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і надає зручні методи, які його використовують. - Синтаксис
..називається синтаксис оновлення структури.