Rust中,我相信处理可恢复错误的惯用方法是使用Result。例如,这个函数显然是惯用的:
fn do_work() -> Result<u64, WorkError> {...}
当然,有些函数只有一个明显的失败状态,因此使用 Option 类型。一个惯用的例子是:
fn do_work() -> Option<u64>
这些问题在文档中都有明确的解答。然而,我对一个函数在失败时没有实际意义的返回值而成功时也没有有意义的返回值的情况感到困惑。请比较以下两个函数:
fn do_work() -> Option<WorkError>
// vs
fn do_work() -> Result<(), WorkError>
我不确定这两种方式哪种更符合惯用语,或在实际的Rust代码中使用更频繁。我通常寻找这类问题的资源是Rust书籍,但我认为在其"错误处理"部分中没有涉及到这个问题。我在其他任何Rust文档中也没有找到太多有用信息。
当然,这似乎很主观,但我正在寻找权威来源,无论是说明哪种形式符合惯用语,还是说明为什么一种形式优于(或劣于)另一种形式。(我还好奇这种约定与其他大量使用"错误作为值"的语言(如Go和Haskell)相比如何。)