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
derive
produz um valor onde todos os campos são preenchidos com seus valores padrão.- Consequentemente, todos os tipos usados no struct devem implementar
Default
também.
- Consequentemente, todos os tipos usados no struct devem implementar
- Frequentemente, os tipos padrão do Rust implementam
Default
com 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
trait
Default
e, convenientemente, provê métodos para isso. - A sintaxe
..
é chamada de sintaxe de atualização de struct.