0 简述
?
问号操作符,是一个语法糖。有空再补
1 运用场景
2 一个错误例子
use std::fs::File;
fn main() {
let f = File::open("hello.txt")?;
}
上面这个例子,我第一次看的时候没有理解,因为这是个语句,所以按理来说返回值应该都是()。。。。
但是,仔细分析一下,File::open
返回一个Result
枚举,之后?
对这个枚举进行解析。等价于下面的代码
let f = File::open("hello.txt");
let mut f = match f {
// 打开文件成功,将file句柄赋值给f
Ok(file) => file,
// 打开文件失败,将错误返回(向上传播)
Err(e) => return Err(e),
};
如果打开文件成功,那么会将file
赋值给f
,如果失败,那么就会直接return,注意是return!!,我当时脑抽以为,把none
值赋给f,c++其他语言经常这样,就是返回一个空
因为Return Err(e)
的原因,所以这时候返回一个Result结构体
,这就和main要求返回()冲突了。