我经常看到像这样返回 Result<(), Error> 的函数或方法:
fn f() -> Result<(), Error> {
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
换句话说,这种返回不返回任何内容或错误。为什么在这种情况下使用 Result 而不是 Option ?我认为 Option 会更合适,因为它有效地返回 None 或值,在我们的示例中 - None 或错误。
fn f() -> Option<Error> {
None
}
Run Code Online (Sandbox Code Playgroud)
Result代表成功或失败;Option表示任何可选值。当你试图代表成功或失败时,即使你可以使用Option,Result更合适。
因为Result是失败替代的类型,所以它也更容易用于检查失败,就像?操作符一样:
fn read_int() -> Result<u32, ReadIntError> {
let mut buf = [0_u8; 10];
read_line(&mut buf)?; // <-- can’t do this if read_line returns
// Option<ReadError>
Ok(parse_int(&buf)?)
}
Run Code Online (Sandbox Code Playgroud)