Назад к задачам
SelectyПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
11
Создание собственного типа Result
Компании, где спрашивали:
Условие задачи
В задаче требуется разработать собственный тип Result, который будет использоваться для передачи результата выполнения функции вместе с информацией об ошибке. Реализуйте структуру Result<T, E>, где T – тип данных в случае успеха, а E – тип ошибки. Предусмотрите методы для создания успешного результата и результата с ошибкой, а также методы для проверки состояния и получения вложенных значений.
Требования:
- Определите обобщённую структуру Result<T, E>.
- Реализуйте конструкторы
ok(value: T) -> Result<T, E>иerr(error: E) -> Result<T, E>. - Добавьте методы
is_ok() -> bool,is_err() -> bool. - Реализуйте методы
unwrap() -> T(выбрасывает паника при ошибке) иunwrap_err() -> E(выбрасывает паника при успехе). - По желанию можно добавить методы
map,map_errи прочие удобные функции.
Пример использования (можно изменить названия переменных, но код оставьте без изменений):
let success: Result<i32, &str> = Result::ok(42);
let failure: Result<i32, &str> = Result::err("error occurred");
assert!(success.is_ok());
assert!(!failure.is_ok());
let value = success.unwrap();
let err_msg = failure.unwrap_err();
Задача подходит для оценки умения работать с обобщениями, паттернами обработки ошибок и базовых принципов проектирования API.