【rust】?问号操作符

发布时间 2023-05-04 22:13:49作者: wenli7363

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要求返回()冲突了。