ExpertiDict

Rust · Intermediário · Inglês · Técnico

impl Trait

/ɪmpl treɪt/substantivo

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

Veja também

Todos os termos de Rust