Можно ли использовать оператор вопросительного знака (?) В расходящейся функции, которая возвращает тип never (!)? - PullRequest
0 голосов
/ 10 марта 2019

Я пишу Rust для встроенного проекта, и подпись моей main функции

#[entry]
fn main() -> !

Я понимаю, что это означает, что он никогда не вернется, и я обычно вхожу в бесконечный цикл в конце main.

Я хочу использовать оператор ? try в своей основной функции, но я не смог найти документацию по rust ? in !. Как мне объяснить это словами?

Можно ли использовать ? в функции () -> !?

1 Ответ

6 голосов
/ 10 марта 2019

можно ли использовать ? в функции () -> !

Нет. Оператор ? - это выражение, где X? интерпретируется примерно как:

match X {
    Ok(success_value) => success_value,
    Err(err_value) => {
         return Err(err_value);  // returns from the enclosing function
    }
}

Обратите внимание, что выражение ? подразумевает возврат от функции, которая его использует. Для компиляции X? тип возвращаемой функции должен быть Result, вариант ошибки которого совместим с вариантом ошибки X. Функция, которая возвращает тип никогда !, в частности обещает никогда не возвращать, поэтому ее тип возврата не совместим с return, подразумеваемым оператором ?.

Функция, которая никогда не возвращается, должна обрабатывать результаты ошибок, используя match или эквивалентный, чтобы выбрать соответствующее действие, или вызывать .unwrap() или .expect(), чтобы преобразовать их в панику.

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