You've already forked comprehensive-rust
mirror of
https://github.com/google/comprehensive-rust.git
synced 2025-11-30 09:08:45 +02:00
1.5 KiB
1.5 KiB
minutes
| minutes |
|---|
| 5 |
The Default Trait
Default trait produces a default value for a type.
#[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 is set!".into(),
..Derived::default()
};
println!("{almost_default_struct:#?}");
let nothing: Option<Derived> = None;
println!("{:#?}", nothing.unwrap_or_default());
}
- It can be implemented directly or it can be derived via
#[derive(Default)]. - A derived implementation will produce a value where all fields are set to their default values.
- This means all types in the struct must implement
Defaulttoo.
- This means all types in the struct must implement
- Standard Rust types often implement
Defaultwith reasonable values (e.g.0,"", etc). - The partial struct initialization works nicely with default.
- The Rust standard library is aware that types can implement
Defaultand provides convenience methods that use it. - The
..syntax is called struct update syntax.