РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
535 of 1245 menu

Привязка @

Привязка @ используется в шаблонах сопоставления для сохранения значения в переменную в тот момент, когда это значение проверяется на соответствие определённому шаблону. Это особенно полезно при работе с перечислениями (enum), когда нужно одновременно проверить вариант и сохранить связанные с ним данные. Синтаксис привязки: имя_переменной @ шаблон.

Синтаксис

match value { name @ pattern => { /* ... */ }, _ => { /* ... */ } }

Пример

Давайте создадим перечисление Message и используем привязку @, чтобы сохранить значение в переменную при сопоставлении:

enum Message { Quit, Move { x: i32, y: i32 }, Write(String), } fn main() { let msg = Message::Write(String::from("abcde")); match msg { m @ Message::Write(ref text) => { println!("Message saved: {:?}", m); println!("Text: {}", text); }, _ => println!("Other message"), } }

Результат выполнения кода:

Message saved: Write("abcde") Text: abcde

Пример

Давайте используем привязку @ с числовым диапазоном, чтобы сохранить значение:

fn main() { let num = 5; match num { n @ 1..=5 => println!("Number in range: {}", n), n @ 6..=10 => println!("Number in range: {}", n), _ => println!("Number out of range"), } }

Результат выполнения кода:

Number in range: 5

Пример

Давайте используем привязку @ вместе с шаблоном Some для извлечения значения из Option:

fn main() { let opt = Some(42); match opt { val @ Some(n) => { println!("Option value: {:?}", val); println!("Inner number: {}", n); }, None => println!("Nothing"), } }

Результат выполнения кода:

Option value: Some(42) Inner number: 42

Смотрите также

  • оператор match,
    который выполняет сопоставление с образцом
  • конструкция if-let,
    которая упрощает сопоставление с одним шаблоном
  • конструкция while-let,
    которая выполняет сопоставление в цикле
  • шаблон деструктуризация,
    который позволяет извлекать данные из enum
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить