Равенство структур через пометку в Rust
Сравнить две структуры оператором равенства можно только если тип выполняет трейт частичного равенства. Для простых полей компилятор умеет сам собрать сравнение: совпали все поля - значения равны.
Пометка равенства сравнивает структуры по
полям. Часто рядом подключают и полное
равенство: второе имя в списке не меняет
знак ==, но фиксирует, что сравнение
согласовано для всех значений полей:
#[derive(PartialEq, Eq)]
struct User {
name: String,
age: i32,
}
fn main() {
let a = User {
name: String::from("ann"),
age: 20,
};
let b = User {
name: String::from("ann"),
age: 20,
};
let same = a == b;
println!("{}", same);
}
На экране "true". Если изменить
хотя бы одно поле у второго значения,
результат сравнения станет ложным. Знак
неравенства != работает как
отрицание того же правила.
Так же сравнивают структуры только из числовых полей:
#[derive(PartialEq, Eq)]
struct Point {
x: i32,
y: i32,
}
fn main() {
let one = Point { x: 0, y: 1 };
let two = Point { x: 0, y: 1 };
println!("{}", one == two);
}
Дана структура:
struct User {
name: String,
age: i32,
}
Добавьте пометку равенства с двумя
именами, соберите два одинаковых
пользователя и выведите результат
==.
Дана структура:
struct Pair {
left: i32,
right: i32,
}
Подключите сравнение по полям, создайте
first и second с разными
числами и выведите, равны ли они.
Скажите, что должно совпасть у двух
значений, чтобы == вернул истину
при пометке равенства на структуре.