При возникновении второй panic во время раскрутки стека почему Rust аварийно завершает процесс вместо передачи ошибки вызывающему коду?
База Hintsage
Обработка ошибок
Result, Option, оператор ?, panic и проектирование ошибок.
Практика
Вопросы: Обработка ошибок
Когда оператор ? получает ошибку типа, отличного от типа ошибки возвращающей функции, как Rust определяет преобразование?
Где проходит граница между возвратом Result и вызовом panic при ошибке в Rust?
Представьте, что функция должна изолировать аварийное завершение замыкаемой операции. Какой результат выведет программа и за счёт какого механизма выполнение продолжается после panic!?
use std::panic::catch_unwind;
fn main() {
let result = catch_unwind(|| {
panic!("сбой");
});
println!("{}", result.is_err());
println!("продолжение");
}
В чём смысл преобразования Option<Result<T, E>> в Result<Option<T>, E> методом transpose?
При добавлении контекста к ошибке библиотеки какой дизайн позволяет сохранить исходную причину для вызывающего кода?
Как выбор типа ошибки в 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"));
}
В каких случаях отсутствие значения следует представить через Option, а не через Result?
Что именно делает оператор ? с результатом Err внутри функции, возвращающей Result?
Показано 41–50 из 50