Как мне сказать компилятору, что моя функция завершает программу, как process :: exit ()? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть следующая функция, которая включает некоторую логику восстановления после ошибки и 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();
        }
    }
}

Есть идеи, как сделать эту работу?

Детская площадка

1 Ответ

0 голосов
/ 08 февраля 2019

Измените подпись gracefully_shutdown на

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

Это сообщит компилятору, что эта функция никогда не вернется!! называется тип никогда не .

Для получения дополнительной информации см.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...