我可以在发散函数中使用问号运算符(?)来返回永不类型(!)吗?

eve*_*992 0 rust

我正在为嵌入式项目编写Rust,而我的main函数签名是

#[entry]
fn main() -> !
Run Code Online (Sandbox Code Playgroud)

我知道这意味着它永远不会返回,而且我通常在main的末尾进入无限循环。

我想?在主要功能中使用try运算符,但无法在文档中搜索rust ? in !。我该如何用单词拼写出来?

我可以?在() -> !功能中使用吗?

use*_*342 6

我可以?在() -> !函数中使用吗

否。?运算符是一个表达式,X?其大致解释为:

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

注意?表达式如何暗示使用它的函数的返回。为了X?进行编译,函数的返回类型必须是Result其错误变量与的错误变量兼容的X。返回永不类型的函数!明确承诺永不返回,因此其返回类型与运算符所return暗示的不兼容?。

永不返回的函数应该使用match或等效方法来选择错误结果,以选择适当的操作,或者调用.unwrap()或.expect()将其转换为紧急情况。