Rust · Intermediário · Inglês · Técnico
impl Trait
Sintaxe que declara um tipo concreto sem nomeá-lo, dizendo apenas qual trait ele implementa. Em argumentos é açúcar para genéricos, e em retornos esconde o tipo.
Onde usar
Muito usado para devolver iteradores e closures sem escrever o tipo longo. Em retorno, a função só pode devolver um único tipo concreto.
Em código
fn seq(n: u32) -> impl Iterator<Item = u32> {
(0..n).filter(|x| x % 2 == 0)
}
let total: u32 = seq(10).sum();
println!("{total}");Exemplos
Return impl Iterator instead of a Vec.
Devolva impl Iterator em vez de um Vec.
You can't return two types with impl Trait.
Você não pode devolver dois tipos com impl Trait.
Cuidado
Não é o mesmo que Box<dyn Trait>: impl Trait não aloca e não permite devolver tipos diferentes em ramos diferentes.
Antônimos
trait object