当函数没有返回成功值时如何使用 Result?

Gal*_*axy 5 error-handling rust

要定义一个带有 void return 的函数,我的代码如下所示:

trait Handler {
    fn on_message(&mut self, msg: String) -> Result<()> {
        println!("on_message: {}", msg);
        Ok(())
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器告诉我这是错误的,因为 aResult应该始终有 2 个参数:

trait Handler {
    fn on_message(&mut self, msg: String) -> Result<()> {
        println!("on_message: {}", msg);
        Ok(())
    }
}
Run Code Online (Sandbox Code Playgroud)

这让我很困惑。当我不关心函数的返回值时,应该如何定义它?

Pet*_*all 7

如果您不需要错误处理,则无需使用Result

fn on_message(&mut self, msg: String) { 
    // ... 
}
Run Code Online (Sandbox Code Playgroud)

如果您需要处理错误,但没有有意义的“成功”值,那么您可以说成功类型是(),但您仍然需要说明错误类型是什么:

fn on_message(&mut self, msg: String) -> Result<(), MyError> {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

在我放置的地方MyError,您可以使用内置错误io::Error,例如自定义错误结构或枚举,或任何其他类型,例如String. 它甚至可以是(),创建您的返回类型Result<(), ()>,这将使​​您的函数的用户知道它是否成功,而不提供有关成功结果或可能的错误的任何信息。此时,您可能会考虑使用 aOption<()>甚至仅使用 a bool,它们携带相同数量的信息。