给出这个例子:
fn function() -> Result<(), &'static str> {
Ok(())
}
fn main() {
function()?; // Compile error
}
我收到错误:cannot use the ? operator in a function that returns ()
。
为什么我不能使用?
运算符来执行此类函数?是否有语法糖来避免使用match
语句?
答案 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
的错误值。