El trait Default
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: "Ya está configurado.".into(), ..Derived::default() };
println!("{almost_default_struct:#?}");
let nothing: Option<Derived> = None;
println!("{:#?}", nothing.unwrap_or_default());
}
This slide should take about 5 minutes.
- Se puede implementar directamente o se puede derivar a través de
#[derive(Default)]. - Una implementación derivada producirá un valor en el que todos los campos tendrán sus valores predeterminados.
- Esto significa que todos los tipos de la estructura también deberán implementar
Default.
- Esto significa que todos los tipos de la estructura también deberán implementar
- Los tipos estándar de Rust suelen implementar
Defaultcon valores razonables (por ejemplo,0,"", etc.). - La inicialización parcial de estructuras funciona bien con los valores predeterminados.
- La biblioteca estándar de Rust tiene en cuenta que los tipos pueden implementar
Defaulty, por ello, proporciona métodos prácticos que lo utilizan. - la sintaxis
..se denomina sintaxis de actualización de estructuras.