Паттерн _
Паттерн _ (подчеркивание) в контексте enum
используется для игнорирования значения при сопоставлении
с образцом. Он позволяет не привязывать переменную к значению,
которое не будет использоваться в дальнейшем. Паттерн _
применяется в конструкциях match, if let
и while let, а также при деструктуризации кортежных
и структурных вариантов enum.
Синтаксис
match value
{
Variant(_) => { /* ... */ },
_ => { /* ... */ },
}
Пример
Давайте создадим enum Message с кортежным вариантом
Move и проигнорируем его значение с помощью паттерна
_:
enum Message
{
Quit,
Move(i32, i32),
}
fn main()
{
let msg = Message::Move(10, 20);
match msg
{
Message::Move(_, _) => println!("Move variant"),
Message::Quit => println!("Quit variant"),
}
}
Результат выполнения кода:
Move variant
Пример
Давайте используем паттерн _ для игнорирования всех
вариантов, кроме одного:
enum Message
{
Quit,
Move(i32, i32),
Write(String),
}
fn main()
{
let msg = Message::Write(String::from("abcde"));
match msg
{
Message::Write(text) => println!("Write: {}", text),
_ => println!("Other variant"),
}
}
Результат выполнения кода:
Write: abcde
Пример
Давайте применим паттерн _ в структуре Option,
чтобы проигнорировать значение Some:
fn main()
{
let opt = Some(12345);
match opt
{
Some(_) => println!("Has value"),
None => println!("No value"),
}
}
Результат выполнения кода:
Has value
Пример
Давайте используем паттерн _ в структуре Result
для игнорирования ошибки:
fn main()
{
let res: Result<i32, &str> = Ok(100);
match res
{
Ok(value) => println!("Ok: {}", value),
Err(_) => println!("Error occurred"),
}
}
Результат выполнения кода:
Ok: 100
Смотрите также
-
оператор
match,
который выполняет сопоставление с образцом -
конструкция
if let,
которая выполняет сопоставление с одним образцом -
конструкция
while let,
которая выполняет сопоставление в цикле -
паттерн
destructure,
который выполняет деструктуризацию enum