Avatar ·

问号运算符 (?) 在 Rust 中有什么作用,它如何处理错误?

大家好!我是 Rust 新手,正在尝试理解错误处理。我经常在别人的代码中看到一个奇怪的问号运算符 — `?`。例如,像这样的代码: ```rust use std::fs::File; use std::io::Read; fn read_file(path: &str) -> Result { let mut file = File::open(path)?; let mut content = String::new(); file.read_to_string(&mut content)?; Ok(content) } ``` 我知道 `File::open` 返回一个 `Result`,但行尾的这个 `?` 是做什么的?没有它,编译器会报错说我没有处理 `Result`。但如果我加上 `?`,代码就能工作。 我试过阅读文档,但写得太复杂了。你能用简单的话解释一下:这个神奇的问号是什么?它和 `unwrap()` 或 `match` 有关吗?为什么函数返回 `Result`,但在函数体内我可以使用 `?` 而不必为每个调用写 match? 让我困惑的例子是:如果我把 `?` 替换成 `.unwrap()`,代码也能工作,但出错时程序会崩溃。