Web*_*rix 5 pattern-matching rust
我有以下功能,包括一些错误恢复逻辑和process::exit(0)最后:
fn gracefully_shutdown() {
// Do some logic for the recover
process::exit(7);
}
Run Code Online (Sandbox Code Playgroud)
我想在错误的情况下调用该函数,但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
}
}
Run Code Online (Sandbox Code Playgroud)
编译器真的难以理解其本身gracefully_shutdown()包含process::exit(0)的内容吗?
我希望我能以这种方式编写代码:
fn handle_result(my_result: Result<i32, MyError>) -> i32 {
match my_result {
Ok(val) => val,
Err(_error) => {
gracefully_shutdown();
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何使这项工作的想法?
将签名更改gracefully_shutdown为
fn gracefully_shutdown() -> ! {
process::exit(7);
}
Run Code Online (Sandbox Code Playgroud)
这将告诉编译器此函数永远不会返回!在!被称为永不类型.
有关更多信息,请参阅