Fácil Rust
Derivando Debug e PartialEq
Enunciado
Crie uma struct Person com os campos name: String e age: u32. Derive Debug e PartialEq para ela. No main, crie duas instâncias, imprima-as com {:?} e compare-as com ==.
Requisitos
- A struct deve ter os campos
nameeage. - Os traits
DebugePartialEqdevem ser derivados. - O programa deve imprimir as duas pessoas com
{:?}e o resultado da comparação.
Código inicial
// Defina a struct Person e derive Debug e PartialEq
fn main() {
// Crie duas pessoas e imprima-as
// Compare-as e imprima o resultado
}
Saída esperada
Person { name: "Alice", age: 30 }
Person { name: "Bob", age: 25 }
São iguais? false
Ver dica
Use #[derive(Debug, PartialEq)] antes da struct. Para imprimir, use println!("{:?}", pessoa).
Mostrar solução
#[derive(Debug, PartialEq)]
struct Person {
name: String,
age: u32,
}
fn main() {
let p1 = Person { name: String::from("Alice"), age: 30 };
let p2 = Person { name: String::from("Bob"), age: 25 };
println!("{:?}", p1);
println!("{:?}", p2);
println!("São iguais? {}", p1 == p2);
}
Passo a passo
- Definimos a struct
Personcom os camposname(String) eage(u32). - Aplicamos
#[derive(Debug, PartialEq)]para gerar automaticamente as implementações deDebugePartialEq. - No
main, criamos duas instâncias com valores diferentes. - Usamos
println!com{:?}para imprimir cada pessoa no formato de depuração. - Comparamos
p1 == p2usando o operador de igualdade, que agora funciona graças aoPartialEqderivado. - Imprimimos o resultado booleano da comparação.
Por que funciona
O atributo derive instrui o compilador a gerar código que implementa os traits listados. Para Debug, ele cria uma representação textual da struct; para PartialEq, ele compara campo a campo. Como os campos são String e u32, que já implementam esses traits, a derivação é bem-sucedida.
Erros comuns
- Esquecer de derivar
Debuge tentar usar{:?}: o compilador acusa quePersonnão implementaDebug. Solução: adicionar#[derive(Debug)]. - Tentar comparar com
==sem derivarPartialEq: erro de compilação. Solução: incluirPartialEqno derive. - Usar
{}em vez de{:?}para imprimir:Displaynão foi implementado, então o compilador reclama. Use{:?}ou implementeDisplay.
Outra forma de resolver
Se quiser comparar apenas por um campo, você pode implementar PartialEq manualmente, mas para a maioria dos casos o derive é suficiente e idiomático.
Saída esperada
Person { name: "Alice", age: 30 }
Person { name: "Bob", age: 25 }
São iguais? false