Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpErET 53 of 288 menu
◀ ▶

Стандартный трейт ошибки в Rust

Исход сбоя в стандартной библиотеке ожидает, что тип ошибки умеет печататься и помечен как ошибка. Трейт печати вы уже оформили; остается выполнить трейт ошибки, чтобы значение можно было класть во вторую ветку исхода.

Часто достаточно пустого блока выполнения: все нужное уже есть в тексте из трейта печати. Тогда компилятор считает тип полноценной ошибкой для цепочек сбоя и для обмена с другими частями кода, которые работают с этим трейтом.

Добавим пустое выполнение к уже оформленному типу:

#[derive(Debug)] struct PathError { path: String, } impl std::fmt::Display for PathError { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!(f, "bad path {}", self.path) } } impl std::error::Error for PathError {} fn main() { let err = PathError { path: String::from("cfg"), }; let outcome: Result<i32, PathError> = Err(err); match outcome { Ok(n) => println!("{}", n), Err(e) => println!("{}", e), } }

Дан следующий код:

struct StepError { step: u32, } impl std::fmt::Display for StepError { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!(f, "step {}", self.step) } }

Подключите стандартный трейт ошибки пустым блоком и верните Err с этим типом из main, обработав исход через match.

Дан следующий код:

struct TagError { tag: String, }

Оформите печать с текстом "tag" и полем, затем отметьте тип как ошибку. Положите значение во вторую ветку Result и выведите текст.

Дан следующий код:

struct PortError { port: u16, }

Сделайте полный тип сбоя с печатью "port" и числом, пустым трейтом ошибки и функцией main, которая показывает сообщение из Err.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить