Что именно делает оператор ? с результатом Err внутри функции, возвращающей Result?
База Hintsage
Обработка ошибок
Result, Option, оператор ?, panic и проектирование ошибок.
Практика
Вопросы: Обработка ошибок
В каких случаях отсутствие значения следует представить через Option, а не через Result?
Разберите последствия вызова функции для разных входных данных: что произойдёт при передаче строки "http" и почему возвращаемый тип не защищает от аварийного завершения?
fn parse_port(text: &str) -> Result<u16, String> {
let port = text.parse::<u16>().unwrap();
Ok(port)
}
fn main() {
println!("{:?}", parse_port("8080"));
println!("{:?}", parse_port("http"));
}
Как выбор типа ошибки в Result влияет на возможность вызывающего кода различать причины сбоя?
При добавлении контекста к ошибке библиотеки какой дизайн позволяет сохранить исходную причину для вызывающего кода?
В чём смысл преобразования Option<Result<T, E>> в Result<Option<T>, E> методом transpose?
Представьте, что функция должна изолировать аварийное завершение замыкаемой операции. Какой результат выведет программа и за счёт какого механизма выполнение продолжается после panic!?
use std::panic::catch_unwind;
fn main() {
let result = catch_unwind(|| {
panic!("сбой");
});
println!("{}", result.is_err());
println!("продолжение");
}
Где проходит граница между возвратом Result и вызовом panic при ошибке в Rust?
Когда оператор ? получает ошибку типа, отличного от типа ошибки возвращающей функции, как Rust определяет преобразование?
При возникновении второй panic во время раскрутки стека почему Rust аварийно завершает процесс вместо передачи ошибки вызывающему коду?
При последовательной обработке данных, когда для Result нужен and_then вместо map?
В функции, возвращающей Option, что делает оператор ? при получении None?
Как неполное сопоставление с Result влияет на компиляцию Rust?
Посмотрите на функцию с ранним возвратом через ?. В каком порядке будут напечатаны строки и почему?
Что происходит с владением успешного значения при применении оператора ? к Result?
Обязательна ли реализация std::error::Error для типа ошибки E, чтобы Result<T, E> работал с оператором ?
При сборке итератора значений типа Result в Result с коллекцией успешных значений на каком элементе прекращается обработка?
Как map_err преобразует ошибку в Result, не изменяя успешное значение?
Разберите механизм: что происходит с локальными значениями при раскрутке стека после panic в Rust?
Сравните unwrap_or и unwrap_or_else для Option: когда вычисляется значение по умолчанию и как это влияет на поведение программы?
Показано 1–20 из 50