Rust · Avançado · Inglês · Técnico
trait upcasting
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