Rust · Avançado · Inglês · Técnico
orphan rule
Regra de coerência que só permite implementar um trait para um tipo se o trait ou o tipo forem definidos na sua crate. Evita impls conflitantes entre crates.
Onde usar
Aparece como o erro E0117 ao tentar implementar Display para Vec<T>. O contorno comum é o padrão newtype, com um tipo local.
Em código
struct Meu;
// ok: o tipo Meu é local
impl Default for Meu {
fn default() -> Self { Meu }
}
// erro: trait e tipo vêm de fora
// impl std::fmt::Display for Vec<u8> {}Exemplos
The orphan rule stops me from implementing it.
A orphan rule me impede de implementar isso.
Use a newtype to get around the orphan rule.
Use um newtype para contornar a orphan rule.
Cuidado
Usar um tipo local como parâmetro, como Vec<Meu>, não contorna a regra: o Vec continua sendo externo.
Sinônimos
regra do órfão