Rust · Avançado · Português · Técnico
variância
Propriedade que diz como um tipo genérico reage a lifetimes ou tipos mais longos ou curtos: &T é covariante, e &mut T é invariante em T.
Onde usar
Aparece em erros enigmáticos de lifetime e ao desenhar structs com PhantomData ou ponteiros brutos. Define se um &'static pode ser usado onde se pede um &'a.
Em código
fn curto<'a>(s: &'a str) -> &'a str { s }
let longa: &'static str = "oi";
// &'static vira &'a: covariância
let r = curto(longa);
println!("{r}");
// &mut T é invariante em TExemplos
A variância do tipo está impedindo essa troca de lifetime.
&mut T é invariante, por isso o erro.
Cuidado
Não é herança de classes: em Rust a subtipagem existe quase só entre lifetimes.
Sinônimos
covariância, invariância