Вы можете связать свои функции в сценарии успеха с помощью and_then
и отобразить их ошибки с помощью map_err
.
Как здесь, вы можете связать их:
let result = f1().and_then(|_| {
f2().and_then(|_| {
f3().and_then(|_| {
println!("All functions are succeed");
Ok(())
})
})
});
Здесь вы будетеиметь переменную result
, если возникает ошибка.
Тогда вы можете сопоставить эту ошибку с оператором if let Err(error)
следующим образом:
if let Err(error) = result {
println!("Problem occurred: {:?}", error);
};
Существует также возможность выбросить вашу ошибку в верхнююуровни с макросом try!
или оператором ?
, как показано ниже:
fn throw_error() -> Result<String, MyError> {
let string_val = "will not be returned".to_string();
Err(MyError::thrownError)?;
Ok(string_val)
}
Здесь вы можете протестировать и поиграть немного больше, чтобы понять концепции.