我如何告诉我函数终止程序像过程中的编译器::退出()?

问题描述 投票:4回答:1

我有以下功能,其中包括一些错误恢复逻辑和到底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();
        }
    }
}

任何想法,使这项工作?

Playground

rust pattern-matching
1个回答
7
投票

更改gracefully_shutdown到签名

fn gracefully_shutdown() -> ! {
    process::exit(7);
}

这会告诉该函数永远不会返回编译器!该!被称为never type

欲了解更多信息,请参阅

© www.soinside.com 2019 - 2024. All rights reserved.