关于 Rust 的 From 特性的尝试

文章目录

  • 关于`Rust`的`From`特性的尝试

关于RustFrom特性的尝试

The Rust Programming Language一书中,第 9.2 节Recoverable Errors with Result中有如下:

For example, we could change the read_username_from_file function in Listing 9-7 to return a custom error type named OurError that we define. If we also define impl From<io::Error> for OurError to construct an instance of OurError from an io::Error, then the ? operator calls in the body of read_username_from_file will call from and convert the error types without needing to add any more code to the function.

这里提到的From特性,并提到可以使用自定义的OurError,并为它实现impl From<io::Error> for OurError特性,我觉得我有时间可以尝试一下。

下面是我的尝试代码及输出:

#![allow(unused)]
use std::fs::File;
use std::io::{self, Read};#[derive(Debug)]
struct OurError {desc: String,
}impl From<io::Error> for OurError {fn from(value: io::Error) -> Self {OurError {desc: format!("From io::Error {} to OurError.", value),}}
}fn read_username_from_file() -> Result<String, OurError> {let mut username_file = File::open("hello.txt")?;let mut username = String::new();username_file.read_to_string(&mut username)?;Ok(username)
}fn main() {read_username_from_file().unwrap();
}

程序输出:

thread 'main' panicked at src\main.rs:26:31:
called `Result::unwrap()` on an `Err` value: OurError { desc: "From io::Error 系统找不到指定的文件。 (os error 2) to OurError." }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: process didn't exit successfully: `target\debug\temp.exe` (exit code: 101)

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

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

相关文章

线性dp+中位数,POJ3666 Making the Grade

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 3666 -- Making the Grade (poj.org) 二、解题报告 1、思路分析 先不考虑…

【MySQL 系列】在 Ubuntu 上安装 MySQL

Ubuntu 是一个使用非常广泛的 Linux 发行版。Ubuntu Server 则是云上最流行的服务器操作系统。本篇文章中&#xff0c;我们展示了在 Ubuntu 上安装 MySQL 8 的详细步骤。 文章目录 1、先决条件2、在 Ubuntu 中安装 MySQL2.1、更新软件仓库包索引2.2、升级本地软件2.3、配置 MyS…

数据结构-二分查找

1.二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解…

Vessel - Linux hackthebox

#hard #runc #RE #Nodejs-SQLI Enumeration .git leak 使用 dumpall 下载 .git 打开 routes/index.js 可以看到网站使用 nodejs mysql 编写&#xff0c;且只有登录功能 router.post(/api/login, function(req, res) {let username req.body.username;let password req…

ROS2中launch编写及参数含义(xml、python)

ROS2系列文章目录 ROS2中nav_msgs/msg/Path 数据含义及使用 ROS2中std_msgs/msg/Header 数据含义及使用 ROS中TF变换详解 文章目录 ROS2系列文章目录ROS2中launch编写及参数含义&#xff08;xml、python&#xff09;一、ROS官方介绍二、实现案例1.编写主函数、CMakeLists.tx…

基于springboot实现图书推荐系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现图书馆推荐系统演示 摘要 时代的变化速度实在超出人类的所料&#xff0c;21世纪&#xff0c;计算机已经发展到各行各业&#xff0c;各个地区&#xff0c;它的载体媒介-计算机&#xff0c;大众称之为的电脑&#xff0c;是一种特高速的科学仪器&#xff0c;比…

实时智能应答3D数字人搭建

语音驱动口型的算法 先看效果&#xff1a; 你很快就可以帮得上我了 FACEGOOD 决定将语音驱动口型的算法技术正式开源&#xff0c;这是 AI 虚拟数字人的核心算法&#xff0c;技术开源后将大程度降低 AI 数字人的开发门槛。FACEGOOD是一家国际领先的3D基础软件开发商&#xff0c;…

VS2017 boost环境配置与报错解决

1、下载Boost 2、boost编译 将下载好的压缩包文件解压,我这里放到了D:\Qt文件夹内 按win键找到 vs2017(主要看你的vs是什么版本)的x86_x64兼容工具命令提示符 输入以下命令: 首先进入到解压的boost文件夹,复制一下前面解压的路径 cd D:\Qt\boost_1_78_0然后输入命令,…

Jmeter(二) - 从入门到精通 - 创建测试计划(Test Plan)(详解教程)

1.简介 上一篇中已经教你把JMeter的测试环境搭建起来了&#xff0c;那么这一篇我们就将JMeter启动起来&#xff0c;一睹其芳容&#xff0c;首先给大家介绍一下如何来创建一个测试计划&#xff08;Test Plan&#xff09;。 2.创建一个测试计划&#xff08;Test Plan&#xff09…

Java设计模式深度解析:掌握工厂模式,优化对象创建与管理

工厂模式是一种创建型设计模式&#xff0c;它提供了一种在不指定具体类的情况下创建对象的方法。在Java中&#xff0c;工厂模式可以通过接口和实现类来实现。比如我们建一个外形工厂&#xff0c;工厂提供对外的获取外形方法&#xff0c;传入不同的参数即可获取不同的外形。如图…

git命令行提交——github

1. 克隆仓库至本地 git clone 右键paste&#xff08;github仓库地址&#xff09; cd 仓库路径&#xff08;进入到仓库内部准备提交文件等操作&#xff09; 2. 查看main分支 git branch&#xff08;列出本地仓库中的所有分支&#xff09; 3. 创建新分支&#xff08;可省…

Linux 之五:权限管理(文件权限和用户管理)

1. 文件权限 在Linux系统中&#xff0c;文件权限是一个非常基础且重要的安全机制。它决定了用户和用户组对文件或目录的访问控制级别。 每个文件或目录都有一个包含9个字符的权限模式&#xff0c;这些字符分为三组&#xff0c;每组三个字符&#xff0c;分别对应文件所有者的权限…

ETAS易特驰公司ESCRYPT信息

易特驰是全球领先的嵌入式软件开发与汽车信息安全解决方案和服务提供商。易特驰集团成立于1994年&#xff0c;是罗伯特博世集团的全资子公司。作为一家系统供应商&#xff0c;易特驰提供整套的工具和工具解决方案&#xff0c;同时也提供工程服务、咨询、培训和支持等服务。ESCR…

Rust:Mutex 的示例代码

在Rust中&#xff0c;你可以使用std::sync::Mutex来创建一个互斥锁&#xff0c;从而保护共享资源。下面是一个使用Mutex的简单示例&#xff1a; use std::sync::Mutex; use std::thread; use std::time::Duration; fn main() { // 创建一个包含整数的Mutex let counter…

[力扣 Hot100]Day47 从前序与中序遍历序列构造二叉树

题目描述 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 出处 思路 根据先序和中序可以划分左右子树&#xff0c;递归构造子树即可。 代码 cla…

GIS之深度学习08:安装GPU环境下的pytorch

环境&#xff1a; cuda&#xff1a;12.1.1 cudnn&#xff1a;12.x pytorch&#xff1a;2.2.0 torchvision&#xff1a;0.17.0 Python&#xff1a;3.8 操作系统&#xff1a;win &#xff08;本文安装一半才发现pytorch与cuda未对应&#xff0c;重新安装了cuda后才开始的&a…

RT-thread学习持续更新中(1)

标准版RTT移植 先不要选择nano版本&#xff0c;选标准版的 include包含头文件 applications 应用层的程序编写放里面 drivers驱动 libraries库 rtthread的内核 LOG_D打印信息 通过修改board.c的SystemClock_Config&#xff08;&#xff09;更改系统时钟 由于在创建工程向导…

Docker的安装及MySQL的部署(CentOS版)

目录 1 前言 2 Docker安装步骤 2.1 卸载可能存在的旧版Docker 2.2 配置Docker的yum库 2.2.1 安装yum工具 2.2.2 配置Docker的yum源 2.3 安装Docker 2.4 启动和校验 2.5 配置镜像加速(使用阿里云) 2.5.1 进入控制台 2.5.2 进入容器镜像服务 2.5.3 获取指令并粘贴到…

深度学习-2.4建模过程总结和第一个最优化函数

文章目录 建模过程总结和第一个最优化函数建模过程第一个最优化函数1.最小二乘法的代数表示方法2.最小二乘法的矩阵表示形式3.最小二乘法的简单实现4.反向验证导数为零 建模过程总结和第一个最优化函数 建模过程 此处我们是通过一个简单的例子&#xff0c;来介绍机器学习、包…

推理判断-聂佳-判读4-定义判断

知识点讲解 考点1 快速识别有效信息 考点2 同构选项排除 题目 考点1 快速识别有效信息 考点2 同构选项排除 总结