Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpDrEq 47 of 288 menu
◀ ▶

Равенство структур через пометку в 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 с разными числами и выведите, равны ли они.

Скажите, что должно совпасть у двух значений, чтобы == вернул истину при пометке равенства на структуре.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить