El Trait Default produce un valor predeterminado para un tipo.
#[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());
}
- Se puede implementar directamente o se puede derivar mediante #[derive(Default)].
- Una implementación derive producirá un valor en el que todos los campos se establecerán en sus valores por defecto.
- Esto significa que todos los tipos de la estructura también deben implementar Default.
- Los tipos estándar de Rust a menudo implementan el valor predeterminado con valores razonables (por ejemplo, 0, "", etc.).
- La copia parcial de la estructura funciona bien de forma predeterminada.
- La biblioteca estándar de Rust es consciente de que los tipos pueden implementar el valor predeterminado y proporciona métodos convenientes para usarlo.
- la .. sintaxis se llama sintaxis de actualización de estructura