rust的类型转换(四)

基础类型

使用 as 关键字:用于基本数值类型之间的转换,例如将 i32 转换为 u32。
例子:let x: i32 = 10; let y: u64 = x as u64;
使用标准库中的转换方法:如 from()into() 方法,这些方法通常用于无风险的转换,或者当转换可能失败时返回 Result 类型。
例子:let x: i32 = 10; let y: u64 = u64::from(x);(如果转换是安全的)
使用 try_into()try_from():当转换有可能失败时(例如,当试图将较大的整数类型转换为较小的整数类型时),这些方法会返回一个 Result 类型,允许错误处理。
例子:let x: i32 = 10; let y: u8 = x.try_into().unwrap();
布尔类型转换
布尔类型不能直接转换为数值类型,也不能从数值类型直接转换。
如果需要基于布尔值生成数值,可以使用条件表达式:let num = if bool_val { 1 } else { 0 };
字符与数值类型转换
字符类型 (char) 与整数类型之间的转换也需要显式操作。
例子:将 char 转换为其对应的 Unicode 编码(一个整数):let num = 'a' as u32;
从整数转换到 char 时需要保证整数是一个有效的 Unicode 码点:let ch = std::char::from_u32(97).unwrap();
元组和数组
元组和数组的转换通常涉及到元素的解构或重新组合,而不是类型转换。
例如,从元组转换到不同类型的元组或提取元组中的值:let tup = (1, 2.0, 'a'); let (x, y, z) = tup;

其他类型转字符串

1.使用 to_string() 方法
这是转换任何实现了 Display trait 的类型到字符串的最简单和最直接的方法。i32 和 f64 都实现了 Display trait,所以可以直接使用 to_string() 方法。

let num_i32 = 32;
let num_f64 = 10.5;let str_from_i32 = num_i32.to_string();
let str_from_f64 = num_f64.to_string();println!("i32 to String: {}", str_from_i32);  // 输出:i32 to String: 32
println!("f64 to String: {}", str_from_f64);  // 输出:f64 to String: 10.5

2.使用 format! 宏

let num_i32 = 32;
let num_f64 = 10.5;// 使用 format! 宏进行基本转换
let str_from_i32 = format!("{}", num_i32);
let str_from_f64 = format!("{}", num_f64);// 使用 format! 宏指定浮点数的精度
let formatted_f64 = format!("{:.2}", num_f64);println!("i32 to String: {}", str_from_i32);  // 输出:i32 to String: 32
println!("f64 to String: {}", str_from_f64);  // 输出:f64 to String: 10.5
println!("Formatted f64: {}", formatted_f64);  // 输出:Formatted f64: 10.50

字符串转整形,或者浮点型

let s = "42".to_string();
let result: Result<i32, _> = s.parse();
match result {Ok(num) => println!("Converted string to i32: {}", num),Err(e) => println!("Failed to convert string to i32: {}", e),
}let s = "3.14".to_string();
let result: Result<f64, _> = s.parse();
match result {Ok(num) => println!("Converted string to f64: {}", num),Err(e) => println!("Failed to convert string to f64: {}", e),
}

Result 和 Option 核心枚举类型常用的方法

Option
Option<T>
Option<T> 类型用于可能存在或可能不存在的值。它有两个变体:Some(T) 表示有一个值,和 None 表示没有值。常用方法:unwrap():提取 Some 的值或在 None 时引发 panic。
let some_option = Some("Hello");
println!("{}", some_option.unwrap());  // 输出 "Hello"unwrap_or():提取 Some 的值或在 None 时返回一个默认值。
let none_option: Option<&str> = None;
println!("{}", none_option.unwrap_or("Default"));  // 输出 "Default"map():如果是 Some(T),应用一个函数到内部值并返回一个新的 Optionlet num_option = Some(5);
let squared = num_option.map(|x| x * x);
println!("{:?}", squared);  // 输出 Some(25)and_then():如果是 Some(T),则应用一个返回 Option<U> 的函数,否则返回 None
let some_string = Some("5");
let parsed = some_string.and_then(|s| s.parse::<i32>().ok());
println!("{:?}", parsed);  // 输出 Some(5)
Result
unwrap():提取 Ok 的值或在 Err 时引发 panic。
let ok_result: Result<i32, &str> = Ok(10);
println!("{}", ok_result.unwrap());  // 输出 10unwrap_or():提取 Ok 的值或在 Err 时返回一个默认值。
let err_result: Result<i32, &str> = Err("error");
println!("{}", err_result.unwrap_or(0));  // 输出 0map():如果是 Ok(T),应用一个函数到内部值并返回一个新的 Resultlet ok_result = Ok(2);
let doubled = ok_result.map(|x| x * 2);
println!("{:?}", doubled);  // 输出 Ok(4)and_then():如果是 Ok(T),则应用一个返回 Result<U, E> 的函数,否则返回 Err(E)
let ok_result = Ok("10");
let parsed = ok_result.and_then(|s| s.parse::<i32>().map_err(|e| "parse error"));
println!("{:?}", parsed);  // 输出 Ok(10)or_else():如果是 Err(E),应用一个函数来创建一个新的 Result,否则保持 Ok(T)
let err_result: Result<i32, &str> = Err("error");
let fixed = err_result.or_else(|_| Ok(0));
println!("{:?}", fixed);  // 输出 Ok(0)
if let
let some_option = Some(10);if let Some(value) = some_option {println!("Got a value: {}", value);
} else {println!("Got nothing!");
}let result: Result<i32, String> = Ok(20);if let Ok(num) = result {println!("Success with number: {}", num);
} else {println!("Failed!");
}let some_string = Some("Hello, World!");if let Some(length) = some_string.map(|s| s.len()) {println!("The string length is: {}", length);
} else {println!("No string!");
}let result: Result<i32, String> = Err("Something went wrong".to_string());if let Err(e) = result {println!("Error occurred: {}", e);
}
// 也可以添加一个 else 分支处理成功情况
else {println!("Success, no errors!");
}let result: Result<i32, String> = Err("failed".to_string());// 使用 map_err 转换错误类型,然后使用 if let 检查
if let Err(e) = result.map_err(|e| format!("Error: {}", e)) {println!("{}", e);
}

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

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

相关文章

ASPICE培训是深化软件过程改进的关键

在当今信息化、智能化的时代&#xff0c;软件行业的发展日新月异&#xff0c;对软件质量和过程管理的要求也越来越高。ASPICE&#xff08;Automotive SPICE&#xff09;作为一种专门针对汽车行业软件过程改进的评估模型&#xff0c;正逐渐成为行业内的重要标准。为了提升软件研…

结构赋值对象

先看代码 Object.prototype[Symbol.iterator] function () {// 使用 Object.values(this) 方法获取对象的所有值&#xff0c;并返回这些值的迭代器对象return Object.values(this)[Symbol.iterator]()// return Object.keys(this)[Symbol.iterator]() } const c {age: 18,na…

推荐ChatGPT4.0——Code Copilot辅助编程、Diagrams: Show Me绘制UML图、上传PDF并阅读分析

5月14日凌晨1点、太平洋时间的上午 10 点&#xff0c;OpenAI的GPT-4o的横空出世&#xff0c;再次巩固了其作为行业颠覆者的地位。GPT-4o的发布不仅仅是一个产品的揭晓&#xff0c;它更像是向世界宣告AI技术已迈入了一个全新的纪元&#xff0c;连OpenAI的领航者萨姆奥特曼也不禁…

先进工艺的DPT技术

“2.5GHz频率 hierarchy DVFS低功耗A72培训” 2.5GHz 12nm 景芯A72 upf DVFS 后端实战训练营&#xff01;随到随学&#xff01; 课程采用hierarchy/partition flow&#xff0c;先完成单核A72实战&#xff0c;然后完成A72 TOP实战&#xff01;训练营简介&#xff1a; Instance&a…

23、matlab一维数据插值:interp1() 函数

1、一维数据插值:interp1() 函数 语法 语法1:vq = interp1(x,v,xq) 使用线性插值返回一维函数在特定查询点的插入值。 语法2:vq = interp1(x,v,xq,method) 指定备选插值方法 参数 x:样本点 v:对应值 xq:查询点的坐标 method:linear(线性插值)、nearest(最近邻…

币界今日选题

来源&#xff1a;币界原创 作者&#xff1a;636Marx 5步做自己文章的铁粉 在浅谈了如何《诱导读者点开文章的9引真经》&#xff0c;作者明白他们锁定读者的时间不到一秒&#xff0c;一个非同质化诱导读者打开文章的标题就是写作第一步&#xff0c;接下来笔者准备讨论更早和更…

JSP、Servlet的Session到底什么时候创建?登录与验证到底和Session有什么关系?

1 测试1[2024-5-23-9:00] 两次获取Session&#xff0c;第一次在查询到用户名密码是否与数据库数据匹配之前&#xff0c;即没有显式地getSession之前&#xff1b; 第二次在查询到用户名密码与数据库数据匹配&#xff0c;显式地getSession之后。 未通过登录验证的Session 通过…

【网络安全的神秘世界】VsCode直连虚拟机

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 通过VsCode连接虚拟机&#xff0c;可以进行远程操作 在vscode里安装以下插件&#xff1a; Docker Dev Containers Remote Development Remote ssh 配…

Execl数据导入 EasyExcel实现

官网 1. 需求简介 读取下面表格数据 第一行和第二行是计划信息 第三行是计划详情的抬头信息,以下行是计划详情信息 总段包含多个分段,总段使用了单元格合并功能 2. 实现读取功能 2.1 引入easyexcel依赖 <dependency><groupId>com.alibaba</groupId><…

分享几个好用的网站、软件

1、果核剥壳 https://www.ghxi.com 果核剥壳是一家综合科技站点&#xff0c;看新闻&#xff0c;分享破解软件、绿色软件&#xff0c;Windows系统。守住互联网最后的一片净土。 2、小众软件 https://www.appinn.com 小众软件是一个分享免费、小巧、有趣、实用软件的网站&…

Hugo搭建博客和部署全流程—Congo主题和优化

欢迎来到我的全新博客&#xff1a;探索科研、创业和日常——Hugo搭建博客、部署和优化全流程 &#x1f30f; Demo site: https://sylvanding.online/ ⭐️ Repo: https://github.com/sylvanding/sylvanding.github.io 我的博客使用Hugo搭建&#xff0c;选择Congo主题&#xff0…

为什么25+胶原蛋白会流失?

随着年龄的增长&#xff0c;特别是当我们步入25岁之后&#xff0c;胶原蛋白的流失问题逐渐凸显&#xff0c;成为影响皮肤健康和外观的重要因素。以下将从几个方面详细解释胶原蛋白流失的原因&#xff1a; 一、年龄增长 胶原蛋白是皮肤的主要支撑结构&#xff0c;但随着年龄的增…

身边消失的超市越来越多!盒马、山姆也卷出历史新高度

不知不觉&#xff0c;身边不少老牌连锁超市都在忽然之间消失得无影无踪。 前不久&#xff0c;山姆又发布了长期降价清单&#xff0c;而随着山姆又一次降价&#xff0c;盒马也再一次被推上了风口浪尖。事实上&#xff0c;作为国内市场两大头部仓储会员超市&#xff0c;盒马与山…

数据挖掘与机器学习——分类算法

目录 机器学习算法最普通分类&#xff1a; 分类算法的定义&#xff1a; 分类算法的应用&#xff1a; 分类器实现分类&#xff1a; 分类器的构建标准&#xff1a; 概率模型&#xff1a; 贝叶斯公式&#xff1a; 朴素贝叶斯算法&#xff08;朴素贝叶斯分类器&#xff09;…

一文了解JavaScript 中数组所有API的使用

文章导读&#xff1a;AI 辅助学习前端&#xff0c;包含入门、进阶、高级部分前端系列内容&#xff0c;当前是 JavaScript 的部分&#xff0c;瑶琴会持续更新&#xff0c;适合零基础的朋友&#xff0c;已有前端工作经验的可以不看&#xff0c;也可以当作基础知识回顾。 这篇文章…

【八股】在Gradle和Maven之间抉择构建工具

在Java开发中&#xff0c;Gradle和Maven是两种常用的构建工具&#xff0c;它们在许多方面有不同的特点和使用场景。以下是它们之间的一些主要区别&#xff1a; 构建脚本 Maven&#xff1a;使用XML文件&#xff08;pom.xml&#xff09;来定义项目的构建配置。XML的语法严格且具…

【每日刷题】Day55

【每日刷题】Day55 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 441. 排列硬币 - 力扣&#xff08;LeetCode&#xff09; 2. 455. 分发饼干 - 力扣&#xff08;Leet…

centos系统清理docker日志文件

centos系统清理docker日志文件 1.查看docker根目录位置2.清理日志 1.查看docker根目录位置 命令&#xff1a;docker info ,将Docker Root Dir 的值复制下来。如果目录中包含 等特殊符号的目录&#xff0c;需要转义 2.清理日志 创建文件&#xff1a;vim docker_logs_clean.…

BBC 超2.5万员工敏感数据泄露

近日据外媒报道&#xff0c;英国广播公司 (BBC) 发生了严重的数据泄露事件&#xff0c;了超 25,000 名现任和前任员工的敏感个人信息泄露。 BBC 表示&#xff0c;此次泄密源于第三方云数据存储服务中的私人记录被非法访问。 BBC 表示&#xff1a;“正在与内部和外部的专家团队…

2024-6-4 石群电路-23

2024-6-4&#xff0c;星期二&#xff0c;13:16&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天又是阳光明媚的一天&#xff0c;没有什么特别的事情发生&#xff0c;加油学习喽~ 今日观看了石群老师电路课程的第39和第40个视频&#xff0c;继续第九章的学…