ExpertiDict

Rust · Avançado · Inglês · Técnico

trait upcasting

/treɪt ʌpˈkæstɪŋ/substantivo

Conversão de &dyn SubTrait ou Box<dyn SubTrait> em &dyn SuperTrait. Foi estabilizada no Rust 1.86 e funciona quando o supertrait é exigido pelo subtrait.

Onde usar

Antes era preciso um método auxiliar as_super em cada trait. Hoje a coerção é automática, o que simplifica hierarquias com dyn.

Em código

trait Animal { fn id(&self) -> u8 { 1 } }
trait Cao: Animal {}
struct Rex;
impl Animal for Rex {}
impl Cao for Rex {}
let c: &dyn Cao = &Rex;
let a: &dyn Animal = c; // desde o Rust 1.86
println!("{}", a.id());

Exemplos

Trait upcasting finally works on stable.

O trait upcasting finalmente funciona no estável.

We removed the as_animal helper thanks to upcasting.

Removemos o auxiliar as_animal graças ao upcasting.

Cuidado

Não é downcasting: o caminho inverso, de dyn Animal para dyn Cao, continua exigindo Any.

Antônimos

downcasting

Veja também

Todos os termos de Rust