我有以下功能,其中包括一些错误恢复逻辑和到底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();
}
}
}
任何想法,使这项工作?
更改gracefully_shutdown
到签名
fn gracefully_shutdown() -> ! {
process::exit(7);
}
这会告诉该函数永远不会返回编译器!该!
被称为never type。
欲了解更多信息,请参阅