Я не понимаю, почему Result
существует в Rust. Я могу видеть, как Option
может быть полезен, но использование Result
просто усложняет код без необходимости.
Рассмотрим следующий пример:
#[derive(PartialEq, Eq, Debug)]
enum MyErr {
None,
FailOne,
}
fn returns_tuple() -> (u8, MyErr) {
// (1, None) // <-- Success path
(0, MyErr::FailOne)
}
fn returns_result() -> Result<u8, MyErr> {
// Ok(1) // <-- Success path
Err(MyErr::FailOne)
}
#[test]
fn test_check_return_values() {
let x = returns_result();
if x.is_ok() {
println!("result: Is OK: {}", x.unwrap()); // <-- Must use unwrap
} else {
match x.err().unwrap() { // <-- Again, unwrapping
MyErr::None => {}, // Required for match
MyErr::FailOne => println!("result: Failed One"),
}
}
}
#[test]
fn test_check_return_values_2() {
let (y, err) = returns_tuple();
match err {
MyErr::None => println!("tuple: Is OK: {}", y),
MyErr::FailOne => println!("tuple: Failed one"),
}
}
Единственное, что я вижу, это то, что он незначительно увеличивает удобство написания функций, так как вы можете просто вызвать Ok()
и Err()
для возврата результатов.
Я видел, как некоторые люди говорили об этом, поэтому вы можете использовать условия, но это не совсем так; вы можете использовать условия отлично, используя кортежи. (Примечание - "условия" были особенностью Rust, которые были удалены до 1.0)
Я также видел, как некоторые люди говорили, что Result
более эффективен, возвращая кортеж, но Result
является кортежем, поэтому я не вижу, как это может быть.