我具有以下功能,其中包括一些错误恢复逻辑以及最后的process::exit(0)
:
fn gracefully_shutdown() {
// Do some logic for the recover
process::exit(7);
}
我想在错误情况下调用该函数,但是match
抱怨incompatible arms
。但是当我将其显式写入匹配臂时,它不会抱怨,如下所示:
fn handle_result(my_result: Result<i32, MyError>) -> i32 {
match my_result {
Ok(val) => val,
//Err(_error) => { process::exit(0); } // Does not complain
Err(_error) => {
gracefully_shutdown();
} // Does complain
}
}
编译器真的很难理解gracefully_shutdown()
本身包含process::exit(0)
吗?
我希望我可以用这种方式编写代码:
fn handle_result(my_result: Result<i32, MyError>) -> i32 {
match my_result {
Ok(val) => val,
Err(_error) => {
gracefully_shutdown();
}
}
}
有什么主意可以做到这一点吗?
答案 0 :(得分:7)
将gracefully_shutdown
的签名更改为
fn gracefully_shutdown() -> ! {
process::exit(7);
}
这将告诉编译器该函数从不返回! !
被称为never type。
有关更多信息,请参见