O Trait Default
O trait Default fornece uma implementação padrão para um 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 está definido!".into(), ..Derived::default() };
println!("{almost_default_struct:#?}");
let nothing: Option<Derived> = None;
println!("{:#?}", nothing.unwrap_or_default());
}
This slide should take about 5 minutes.
- Ele pode ser implementado diretamente ou derivado usando
#[derive(Default)]. - A implementação usando
deriveproduz um valor onde todos os campos são preenchidos com seus valores padrão.- Consequentemente, todos os tipos usados no struct devem implementar
Defaulttambém.
- Consequentemente, todos os tipos usados no struct devem implementar
- Frequentemente, os tipos padrão do Rust implementam
Defaultcom valores razoáveis (p.ex.:0,"", etc). - A inicialização parcial do struct funciona bem com o default.
- A bilioteca padrão do Rust sabe que tipos podem implementar o
traitDefaulte, convenientemente, provê métodos para isso. - A sintaxe
..é chamada de sintaxe de atualização de struct.