对于返回Result<(),error>的函数,不能使用`?`运算符。

时间:2017-12-28 23:23:17

标签: rust

给出这个例子:

fn function() -> Result<(), &'static str> {
    Ok(())
}

fn main() {
   function()?; // Compile error
}

我收到错误:cannot use the ? operator in a function that returns ()

为什么我不能使用?运算符来执行此类函数?是否有语法糖来避免使用match语句?

2 个答案:

答案 0 :(得分:5)

如果function()返回Err结果,您希望发生什么?您无法使用try! / ?,因为它会导致包含函数返回相同的Err,但main()无法返回Err(它返回(),而不是Result<…>)。如果您想恐慌,可以使用unwrap

function().unwrap();

如果您想忽略错误,请丢弃结果:

let _ = function();

答案 1 :(得分:3)

您的main未返回Result。你需要对错误案例做些什么。可能类似于function().expect("oh no! function() failed!!");,这会在不太可能发生的function()事件中导致恐慌和错误退出。 expect()成功时将Result<A,B>变为A,并在发生故障时显示错误消息和B的组合。

或者您可以使用Result::unwrap(),其工作方式类似,但不会添加您自己的错误消息,只需使用Result的错误值。