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

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

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

#[entry]
fn main() -> !

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

我想在我的main函数中使用? try运算符,但我无法搜索rust ? in !的文档。我怎么用文字拼出来?

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

rust
1个回答
6
投票

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

不.?算子是X?大致解释为:

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

注意?表达式如何暗示从使用它的函数返回。要使X?编译,函数的返回类型必须是Result,其错误变体与X的错误变体兼容。返回never类型!的函数特别承诺永远不会返回,因此它的返回类型与return运算符隐含的?不兼容。

永远不会返回的函数应该使用match处理错误结果或等效选择适当的操作,或者调用.unwrap().expect()将它们转换为恐慌。

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