为什么使用空结果作为回报?

Ale*_*aev 2 rust

我经常看到像这样返回 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)

Ry-*_*Ry- 5

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)