ExpertiDict

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

variância

/va.ɾi.ˈɐ̃.sjɐ/substantivo

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 T

Exemplos

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

Veja também

Todos os termos de Rust