要定义一个带有空返回的函数,我的代码如下:
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
这使我感到困惑。当我不关心函数的返回值时应该如何定义它?
答案 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(())
}
}