The Default Trait
Default trait provides a default implementation of a trait.
1. #[derive(Debug, Default)]
2. struct Derived {
3. x: u32,
4. y: String,
5. z: Implemented,
6. }
8. #[derive(Debug)]
9. struct Implemented(String);
11. impl Default for Implemented {
12. fn default() -> Self {
13. Self("John Smith".into())
14. }
15. }
17. fn main() {
18. let default_struct: Derived = Default::default();
19. println!("{default_struct:#?}");
21. let almost_default_struct = Derived {
22. y: "Y is set!".into(),
23. ..Default::default()
24. };
25. println!("{almost_default_struct:#?}");
27. let nothing: Option<Derived> = None;
28. println!("{:#?}", nothing.unwrap_or_default());
29. }
- It can be implemented directly or it can be derived via
#[derive(Default)]. - Derived implementation will produce an instance where all fields are set to their default values.
- This means all types in the struct must implement
Defaulttoo. - Standard Rust types often implement
Defaultwith reasonable values (e.g.0,"", etc). - The partial struct copy works nicely with default.
- Rust standard library is aware that types can implement
Defaultand provides convenience methods that use it.
