如何告诉编译器我的函数终止程序如process :: exit()?

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)

任何使这项工作的想法?

操场

hel*_*low 8

将签名更改gracefully_shutdown

fn gracefully_shutdown() -> ! {
    process::exit(7);
}
Run Code Online (Sandbox Code Playgroud)

这将告诉编译器此函数永远不会返回!在!被称为永不类型.

有关更多信息,请参阅