Паттерн |
Паттерн | (или-паттерн) используется в конструкциях сопоставления с образцом, таких как match и if let, для объединения нескольких альтернативных шаблонов в один. Он позволяет указать, что значение должно соответствовать хотя бы одному из перечисленных вариантов. Паттерн особенно полезен при работе с перечислениями, имеющими несколько вариантов, которые должны обрабатываться одинаково.
Синтаксис
паттерн1 | паттерн2 | паттерн3
Пример
Давайте рассмотрим пример с перечислением, представляющим дни недели, и определим, является ли день выходным:
enum Day
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday,
}
fn main()
{
let day = Day::Saturday;
let res = match day
{
Day::Saturday | Day::Sunday => "weekend",
_ => "workday",
};
println!("{}", res);
}
Результат выполнения кода:
"weekend"
Пример
Паттерн | можно использовать с привязкой значений. Давайте рассмотрим пример, где перечисление содержит данные, и мы хотим обработать несколько вариантов одинаково:
enum Shape
{
Circle(f64),
Square(f64),
Rectangle(f64, f64),
}
fn main()
{
let shape = Shape::Circle(5.0);
let res = match shape
{
Shape::Circle(r) | Shape::Square(r) => r * r,
Shape::Rectangle(w, h) => w * h,
};
println!("{}", res);
}
Результат выполнения кода:
25
Пример
Паттерн | также работает с if let. Давайте проверим, является ли значение одним из нескольких вариантов:
enum Status
{
Active,
Inactive,
Pending,
Blocked,
}
fn main()
{
let status = Status::Blocked;
if let Status::Inactive | Status::Blocked = status
{
println!("{}", "access denied");
}
else
{
println!("{}", "access granted");
}
}
Результат выполнения кода:
"access denied"