Сравнение структур
В Rust структуры можно сравнивать друг с другом с помощью операторов == и !=, если для них реализован трейт PartialEq. Чаще всего этот трейт не пишут вручную, а выводят автоматически с помощью атрибута derive. В этом случае сравнение происходит по всем полям структуры: два экземпляра считаются равными, если равны значения всех их полей.
Синтаксически сравнение структур не отличается от сравнения примитивных типов: используется оператор == или !=. Операторами сравнения принимаются два значения одного и того же типа структуры.
Синтаксис
#[derive(PartialEq)]
struct MyStruct
{
field1: Type1,
field2: Type2,
}
let a = MyStruct { field1: val1, field2: val2 };
let b = MyStruct { field1: val3, field2: val4 };
let res = a == b;
Пример
Давайте создадим структуру Point с двумя полями и сравним два её экземпляра с одинаковыми значениями:
#[derive(PartialEq)]
struct Point
{
x: i32,
y: i32,
}
fn main()
{
let a = Point { x: 1, y: 2 };
let b = Point { x: 1, y: 2 };
let res = a == b;
println!("{}", res);
}
Результат выполнения кода:
true
Пример
А теперь сравним два экземпляра структуры Point с разными значениями полей:
#[derive(PartialEq)]
struct Point
{
x: i32,
y: i32,
}
fn main()
{
let a = Point { x: 1, y: 2 };
let b = Point { x: 3, y: 4 };
let res = a == b;
println!("{}", res);
}
Результат выполнения кода:
false
Пример
Оператор != работает как отрицание оператора ==. Давайте проверим неравенство двух разных экземпляров структуры:
#[derive(PartialEq)]
struct Point
{
x: i32,
y: i32,
}
fn main()
{
let a = Point { x: 1, y: 2 };
let b = Point { x: 3, y: 4 };
let res = a != b;
println!("{}", res);
}
Результат выполнения кода:
true
Смотрите также
-
атрибут
derive,
который автоматически реализует трейты для структур -
доступ к
полям структуры,
который позволяет читать и изменять значения полей -
блок impl,
который добавляет методы и функции к структуре -
деструктуризация,
которая разбирает структуру на отдельные поля