Rust:fs::read_to_string("path")?;中的问号是啥?

94 阅读1分钟

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),  // 提前返回错误
};