结果 Result
Result
是 Option
类型的更丰富的版本,描述的是可能的错误而不是可能的不存在。
也就是说,Result<T,E>
可以有两个结果的其中一个:
Ok<T>
:找到T
元素Err<E>
:发现错误,使用元素E
表示(An error was found with elementE
)
按照约定,预期结果是 “Ok”,而意外结果是 “Err”。
和 Option
类似,Result
也有很多相关联的方法。例如 unwrap()
,能够产生元素 T
或 panic
。 对于事件的处理,Result
和 Option
两者间有很多组合算子重叠。
使用 Rust 过程中,你可能会遇到返回 Result
类型的方法,例如 parse()
方法。 它在某些情况下可能不能将一个字符串解析为另一种类型,所以 parse()
返回一个 Result
表示可能的失败。
我们来看看当 parse()
字符串成功和失败时会发生什么:
fn double_number(number_str: &str) -> i32 { // 让我们尝试使用 `unwrap()` 把数字取出来。它会咬我们吗? 2 * number_str.parse::<i32>().unwrap() } fn main() { let twenty = double_number("10"); println!("double is {}", twenty); let tt = double_number("t"); println!("double is {}", tt); }
在失败的情况下,parse()
留给我们一个错误,让 unwrap()
产生 panic
(原文:parse()
leaves us with an error for unwrap()
to panic
on)。另外,panic
会退出我们的程序,并提供一个不愉快的错误消息。
为了改善错误消息的质量,我们应该更具体地了解返回类型并考虑显式地处理错误。