Rust 初体验5

Rust ?操作符

let contents = fs::read_to_string(config.file_path)?;

? 是什么鬼?

在Rust编程中,ResultOption是两个非常常见的枚举类型,它们用于表示可能失败的函数调用和可能缺失的值。unwrap方法可以用于获取这些类型的成功值或存在的值,但如果直接使用unwrap,在错误或缺失的情况下会导致panic。为了更安全地处理这些情况,Rust引入了?操作符。

具体来说,?操作符的作用包括:

  • 错误传播:当函数返回一个Result类型,并且结果是Err时,?操作符会停止当前的函数执行,并将错误信息返回给上一级调用者。这样可以避免手动检查错误并提前返回,使得代码更加简洁和安全。

  • 强制展开:对于嵌套的Result类型,?操作符会强制展开每一层,直到遇到Err或所有层都展开完毕。这避免了深层嵌套的代码结构,提高了代码的可读性。

  • 泛型友好?操作符支持泛型函数,这意味着你可以编写能够处理任何符合特定trait约束的类型参数的函数,增强了代码的复用性和灵活性。

总的来说,?操作符是Rust中一个强大的工具,它通过编译时的检查来确保错误被适当处理,从而帮助开发者编写出更安全、更健壮的代码。

以下是三个使用?操作符的例子:

  1. 读取文件内容
    use std::fs;fn main() {let file_path = "path/to/file.txt";let contents = fs::read_to_string(file_path)?;println!("File contents: {}", contents);
    }
    

以上代码使用fs::read_to_string函数来读取指定路径下的文件内容。如果读取成功,将文件内容存储在contents变量中;如果读取失败,?操作符会立即返回错误信息并停止执行程序。

  1. 打开网络连接
    use std::net::TcpStream;fn connect_to_server(address: &str, port: u16) -> Result<(), Box<dyn std::error::Error>> {let stream = TcpStream::connect(format!("{}:{}", address, port))?;// 进行其他操作...Ok(())
    }
    

以上使用TcpStream::connect函数尝试连接到指定的服务器地址和端口。如果连接成功,我们可以继续进行其他操作;如果连接失败,?操作符会立即返回错误信息并停止执行函数。

  1. 解析JSON数据
    use serde_json::Value;fn parse_json(json_str: &str) -> Result<(), Box<dyn std::error::Error>> {let value: Value = serde_json::from_str(json_str)?;// 进行其他操作...Ok(())
    }
    

以上例子使用serde_json::from_str函数尝试将一个JSON字符串解析为Value类型。如果解析成功,可以继续进行其他操作;如果解析失败,?操作符会立即返回错误信息并停止执行函数。

这些例子展示了?操作符在不同场景下的用法,它能够简化错误处理代码,提高代码的可读性和健壮性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/684452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Peter算法小课堂—哈希与哈希表

额……字符串我们是第一次学&#xff0c;给大家铺一些基础的不能再基础的基础&#xff0c; 字符串比较大小 字符串大小的比较&#xff0c;不是以字符串的长度直接决定&#xff0c;而是从最左边第一个字符开始比较&#xff0c;大者为大&#xff0c;小者为小&#xff0c;若相等…

[01] Vue2学习准备

目录 vue理解创建实例插值表达式 {{}}响应式特性 vue理解 Vue.js 是一套构建用户界面的渐进式框架。 Vue 只关注视图层&#xff0c; 采用自底向上增量开发的设计。 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 创建实例 准备容器 <div id…

嵌入式中I2C 相关的硬件问题汇总及死锁解决办法

本文主要介绍如何解决I2C设备硬件设计上的各种问题&#xff0c;希望对大家有所帮助&#xff01; 关于I2C协议详细的讲解&#xff0c;可以参考之前的推文&#xff1a;全面解析 I2C 通信协议 一般情况下&#xff0c; i2c 设备焊接没什么问题&#xff0c;按照设备手册一步步来&a…

Github 2024-02-15 开源项目日报 Top9

根据Github Trendings的统计&#xff0c;今日(2024-02-15统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量TypeScript项目4Python项目2Solidity项目2Rust项目1JavaScript项目1Go项目1C项目1 Terraform: 以安全和可预测…

【研究生复试】计算机软件工程人工智能研究生复试——资料整理(速记版)——JAVA

1、JAVA 2、计算机网络 3、计算机体系结构 4、数据库 5、计算机租场原理 6、软件工程 7、大数据 8、英文 自我介绍 1. Java 1. 和 equals的区别 比较基本数据类型是比较的值&#xff0c;引用数据类型是比较两个是不是同一个对象&#xff0c;也就是引用是否指向同 一个对象&…

[职场] 优质简历怎么做 #学习方法#笔记

优质简历怎么做 简历是求职的“敲门砖”&#xff0c;直接影响着求职成败。然而&#xff0c;不少求职者对简历不太重视&#xff0c;认为简历就是写自己的经历。因此&#xff0c;在招聘现场&#xff0c;常会看到这样的简历&#xff1a;有的是从某招聘网站直接下载而来&#xff0c…

B3651 [语言月赛202208] 数组调整

题目描述 给出一个长度为 n 的数组&#xff0c;第 i 个数为ai​。 为了调整这个数组&#xff0c;需要将第 k 个数改变为 −ak​。 请你求出调整后的数组中所有数的和。 输入格式 输入共两行。 输入的第一行为两个整数 n,k。 输入的第二行为 n 个整数&#xff0c;第 i 个…

kali无线渗透之用wps加密模式破解出wpa模式的密码12

WPS(Wi-Fi Protected Setup&#xff0c;Wi-Fi保护设置)是由Wi-Fi联盟推出的全新Wi-Fi安全防护设定标准。该标准推出的主要原因是为了解决长久以来无线网络加密认证设定的步骤过于繁杂之弊病&#xff0c;使用者往往会因为步骤太过麻烦&#xff0c;以致干脆不做任何加密安全设定&…

基于FPGA的OFDM基带发射机的设计与实现

文章目录 前言一、OFDM描述二、本系统的实现参照 1.IEEE 802.11a协议主要参数2.不同调制方式与速率 3. IFFT映射关系4. IEEE 802.11a物理层规范5. PPDU帧格式三、设计与实现 1.扰码2.卷积编码与删余3.数据交织4.符号调制5.导频插入6.IFFT变换 7.循环前缀&加窗8.训练序列生成…

STM32-开发环境之MDK5

目录 一、MDK5的简介 二、MDK5的特点 三、MDK5的主要功能 四、MDK5的应用场景 五、KEIL5的安装 一、MDK5的简介 MDK5&#xff0c;全称为MDK-ARM Version 5&#xff0c;是由德国Keil公司开发的一款针对ARM Cortex-M系列微控制器的完整软件开发环境。它为嵌入式软件开发者提…

LocaSpace Viewer图新地球 4.4.9工程版授权

LocaSpace Viewer图新地球是一个独特的三维数字地球软件&#xff0c;它不用安装&#xff0c;且是一个轻量级的软件&#xff0c;永久授权激活&#xff0c;没有功能方面的限制&#xff0c;在这里&#xff0c;你可以根据需要进行各种操作&#xff0c;如获取多种在线地图资源&#…

Kubernetes安装部署 2

Kubeadm创建集群 如上所示&#xff0c;在阿里云的香港地域的ECS服务器上拉取下载Kubernetes官方提供的容器镜像 如上所示&#xff0c;在阿里云的香港地域的ECS服务器保存镜像到本地 Node A服务器的IP地址&#xff1a;192.168.0.130 端口号6443开放、部署Docker容器引擎、支持cr…

linux系统zabbix监控分布式监控的部署

分布式监控 服务器安装分布式监控安装工具安装mysql导入数据结构配置proxy端浏览器配置 zabbix server端监控到大量zabbix agent端&#xff0c;这样会使zabbix server端压力过大&#xff0c;使用zabbix proxy进行分布式监控 服务器安装分布式监控 安装工具 rpm -Uvh https://…

【C语言】简单贪吃蛇实现保姆级教学!!!

关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა 新年快乐呀小伙伴 引言&#xff1a; 小伙伴们应该都有一个做游戏的梦吧&#xff1f;今天让小庄来用C语言简单实现一下我们的童年邪典贪吃蛇&#xff0c;顺便巩固我们的C语言知识&#xff0c;请安心食用~ 文章目录 贪吃蛇效果一.游戏前工作…

拿捏单链表

目录 引言 一&#xff1a;链表的定义 二&#xff1a;单链表的定义 三&#xff1a;单链表的增删查改 1.单链表增删查改及遍历的声明 注&#xff1a;在测试中创建指向头结点的指针plist 2.二级指针应用的说明 3.单链表的遍历 4.创建节点 5.单链表的插入 (1)头插 …

常见的JavaScript书写基本规范

1. 使⽤驼峰命名法&#xff08;camel case&#xff09;命名变量、函数和对象属性&#xff0c;例如&#xff1a; firstName , getUser&#xff0c;Data() , myObject.property 2. 使⽤⼤写字⺟开头的驼峰命名法&#xff08;Pascal case&#xff09;命名构造函数或类&#xff0…

防御保护--内容安全过滤

目录 文件过滤 内容过滤技术 邮件过滤技术 应用行为控制技术 DNS过滤 URL过滤 防火墙 ---- 四层会话追踪技术 入侵防御 ---- 应用层深度检测技术 深度包检测深度流检测 随着以上俩种的成熟与完善&#xff0c;提出了所谓的内容安全过滤 当然上网行为确实需要治理&…

相机图像质量研究(16)常见问题总结:光学结构对成像的影响--IRCUT

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

如何使用python用30天的时间写一个魂系2d游戏

如何使用python用30天的时间写一个魂系2d游戏 第1-3天&#xff1a;规划和设计第4-7天&#xff1a;搭建开发环境第8-14天&#xff1a;基础编程第15-21天&#xff1a;美术和资源集成第22-28天&#xff1a;游戏测试和优化第29-30天&#xff1a;打包和发布附加建议&#xff1a; 使用…

数据存储和信息安全解读

感恩遇见&#xff0c;你一出现&#xff0c;就是晴天&#x1f31e;2019年2月16日&#xff0c;5年纪念。 #2.1.3 存储和数据库 ##1.存储技术根据服务器类型&#xff0c;存储可以分为封闭系统的存储和开放系统的存储。封闭系统主要指大型机等服务器&#xff0c;而开放系统指基于操…