BorrowCheck › Ядро языка Rust

Структуры, перечисления, сопоставление

Структуры, перечисления с данными, исчерпывающность match, опровержимость и синтаксис шаблонов.

Тема охватывает пользовательские типы данных и сопоставление с образцом (pattern matching). Раздел о структурах разбирает структуры с именованными полями, кортежные и единичные структуры, сокращённую инициализацию полей, синтаксис обновления структуры, который перемещает поля, и требование Debug для {:?}. Раздел о перечислениях показывает варианты с данными, дискриминанты перечислений без данных, вариант как функцию-конструктор и то, почему Option<T> нельзя использовать как T. Вопросы о match проверяют исчерпывающность: почему охранные условия (guards) не учитываются при её проверке, почему match по целому числу должен покрывать весь диапазон и что происходит с ветвью после _. Разделы об опровержимости и синтаксисе шаблонов разбирают, какие шаблоны допустимы в let и параметрах функции, как работают @, .. и альтернативы через |, и как сопоставление через ссылку обходится без перемещения значения. Последний раздел посвящён if let, while let, let else с обязательно расходящимся блоком else, цепочкам let в условии if и макросу matches!.

39 вопросов: базовый уровень — 20, средний — 17, углублённый — 2. 6 справок, 23 источника.

Разделы

  1. Структуры: с именованными полями, кортежные, единичные
  2. Перечисления с данными
  3. Исчерпывающность match
  4. Опровержимость шаблонов
  5. Синтаксис шаблонов: @, .., guards
  6. if let, while let, let else

Предыдущая тема: Времена жизни, подтипизация, вариантность · Следующая тема: Строки и текст