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

Обработка ошибок

Option и Result, оператор ?, паника и раскрутка стека, свои типы ошибок, Box<dyn Error>.

Тема объясняет обработку ошибок: восстановимые ошибки как значения Option и Result и невосстановимые как панику (panic). Вопросы проверяют комбинаторы и мосты между Option и Result, разницу между map и and_then, энергичное вычисление аргумента ok_or, предупреждение о неиспользованном Result и требование Debug для unwrap. Раздел об операторе ? разбирает, к каким типам он применим, почему он возвращает из ближайшей функции или замыкания и почему выполняет ровно одно преобразование через From. Отдельно рассматриваются паника, раскрутка стека (unwinding) и аварийное завершение (abort): вызов деструкторов при раскрутке, паника в Drop, catch_unwind и UnwindSafe, #[track_caller], коды завершения процесса и то, что process::exit деструкторы не вызывает. Последние разделы посвящены своим типам ошибок и Box<dyn Error>: зачем трейту Error нужен Display, что даёт source, как main печатает возвращённую ошибку, почему Box<dyn Error> сам не реализует Error и как вернуть конкретный тип через downcast_ref.

38 вопросов: базовый уровень — 19, средний — 14, углублённый — 5. 5 справок, 30 источников.

Разделы

  1. Option и Result
  2. Оператор ? и From для ошибок
  3. Паника, unwind, abort
  4. Свои типы ошибок, трейт Error
  5. Box<dyn Error> и обёртки

Предыдущая тема: Преобразования типов · Следующая тема: Модули, Cargo, фичи, редакции