【rust】?问号操作符
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要求返回()冲突了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步