1、在 Rust 中,? 运算符是错误传播的快捷语法,用于简化 Result 或 Option 类型的错误处理流程
2、 使用条件
- 仅适用于返回 Result<T, E> 或 Option<T> 类型的表达式3
- 当前函数返回值必须兼容错误类型(如返回 Result<(), io::Error>)
3、实际含义是啥?以此为例(fs::read_to_string("path")?;)
成功 若read_to_string() 调用成功,则返回 Ok(String),这里的问号作用就是:直接解析出Ok(String)中的 String,并继续执行后续代码。
失败 若执行失败,则返回Err(std::error::Error),这里的问号作用就是:终止当前函数,将错误信息返回给上一级调用者,有点像向上抛异常一样。
// 使用 ? 运算符
let content = fs::read_to_string("file.txt")?;
// 等效的 match 表达式
let content = match fs::read_to_string("file.txt") {
Ok(s) => s,
Err(e) => return Err(e), // 提前返回错误
};