当没有成功值要从函数返回时,如何使用结果?

时间:2018-08-19 03:11:35

标签: error-handling rust

要定义一个带有空返回的函数,我的代码如下:

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

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

error[E0243]: wrong number of type arguments: expected 2, found 1
 --> src/lib.rs:2:46
  |
2 |     fn on_message(&mut self, msg: String) -> Result<()> {
  |                                              ^^^^^^^^^^ expected 2 type arguments

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

2 个答案:

答案 0 :(得分:4)

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

fn on_message(&mut self, msg: String) { 
    // ... 
}

如果您需要处理错误,但没有有意义的“成功”值,则可以说成功类型为(),但是您仍然需要说出错误类型是什么:< / p>

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

在我放置MyError的位置,您可以使用内置错误,例如io::Error,自定义错误结构或枚举,或其他任何类型,例如String。甚至可能是(),使您的返回类型为Result<(), ()>,这将使函数的用户知道函数是否成功,而无需提供有关成功结果或可能出现的错误的任何信息。届时,您可以考虑使用Option<()>或什至仅使用bool,它们携带相同数量的信息。

答案 1 :(得分:1)

错误消息试图告诉您Result带有两个类型参数,即Result<(), ()>。这是一个工作版本:

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