ExpertiDict

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

trait object

/treɪt ˈɑːbdʒɛkt/substantivo

Valor acessado por trás de um ponteiro, como Box<dyn Trait>, cujo método é escolhido em tempo de execução por uma tabela de funções. Permite misturar tipos diferentes na mesma coleção.

Onde usar

Usado quando o conjunto de tipos não é conhecido na compilação, como em plugins. Custa uma chamada indireta e exige que o trait seja compatível com dyn.

Em código

trait Forma { fn area(&self) -> f64; }
struct Q(f64);
impl Forma for Q {
  fn area(&self) -> f64 { self.0 * self.0 }
}
let v: Vec<Box<dyn Forma>> =
  vec![Box::new(Q(2.0))];
println!("{}", v[0].area());

Exemplos

Use a trait object to hold different shapes.

Use um trait object para guardar formas diferentes.

Box<dyn Trait> costs one extra indirection.

Box<dyn Trait> custa uma indireção a mais.

Cuidado

Não é o mesmo que genéricos: os genéricos geram código por tipo, e o trait object usa chamada dinâmica.

Sinônimos

dyn Trait, dispatch dinâmico

Antônimos

genéricos

Veja também

Todos os termos de Rust