rust语言枚举类型enum与模式匹配

news/2025/11/25 15:43:54/文章来源:https://www.cnblogs.com/guxuanqing/p/19268758
在 Rust 中,enum(枚举类型,Enumeration)是一种极其强大和灵活的类型定义方式。它允许你定义一个类型,该类型可以是几种可能变体(variants)中的任意一种。
与许多其他语言(如 C/C++)中的枚举不同,Rust 的枚举不仅仅是整数值的别名,它们是具有真正数据承载能力的代数数据类型(Algebraic Data Types, ADTs)。
 
1. 基础用法:简单的枚举
最简单的形式类似于其他语言的枚举,用于表示一组固定的、离散的可能状态:
 
rust
// 定义一个表示颜色的枚举
enum Color {Red,Green,Blue,
}fn main() {let my_color = Color::Red;// 使用 match 表达式来处理不同的变体match my_color {Color::Red => println!("是红色"),Color::Green => println!("是绿色"),Color::Blue => println!("是蓝色"),}
}
Use code with caution.
 
2. 核心特性:带有数据的变体
Rust enum 的强大之处在于,每个变体都可以携带不同类型和数量的数据。
 
示例:IP 地址类型
我们可以定义一个表示 IP 地址的枚举,它可以是 IPv4 或 IPv6,并且需要存储实际的地址数据:
 
rust
enum IpAddr {V4(u8, u8, u8, u8), // IPv4 变体携带四个 u8V6(String),         // IPv6 变体携带一个 String
}fn main() {let home = IpAddr::V4(127, 0, 0, 1);let loopback = IpAddr::V6(String::from("::1"));// 匹配时可以解构出内部数据match home {IpAddr::V4(a, b, c, d) => {println!("IPv4 地址: {}.{}.{}.{}", a, b, c, d);}IpAddr::V6(address) => {println!("IPv6 地址: {}", address);}}
}
Use code with caution.
 
3. 最重要的内置枚举:Option<T> 和 Result<T, E>
Rust 标准库广泛使用 enum 来处理可能存在或可能失败的情况,这取代了其他语言中常见的 null(空指针)和异常处理。
 
A. Option<T>
Option<T> 是一个泛型枚举,用于表示一个值可能存在(Some(T))或不存在(None)。它强制你在编译时处理值不存在的可能性。
 
rust
enum Option<T> {None,Some(T),
}fn main() {let some_number = Some(5);let some_char = Some('e');let absent_number: Option<i32> = None;// 必须使用 match 或 unwrap/expect 等方法来安全地获取内部值match absent_number {Some(num) => println!("找到了数字: {}", num),None => println!("什么都没找到"),}
}
Use code with caution.
 
B. Result<T, E>
Result<T, E> 是另一个泛型枚举,用于表示操作可能成功(Ok(T))或失败(Err(E)),用于错误处理。
 
rust
enum Result<T, E> {Ok(T),Err(E),
}
Use code with caution.
 
4. 为枚举定义方法(impl)
像结构体一样,你可以为枚举类型定义方法:
 
enum Message {Quit,Move { x: i32, y: i32 },Write(String),ChangeColor(i32, i32, i32),
}impl Message {fn call(&self) {match self {Message::Quit => println!("退出!"),Message::Write(text) => println!("正在写入: {}", text),// ... 处理其他变体_ => (), // 忽略其他情况
        }}
}fn main() {let m = Message::Write(String::from("你好"));m.call();
}

 

总结
Rust 的 enum 是一个非常强大的类型定义工具:
  • 它可以定义有限的状态集。
  • 每个变体都可以携带不同类型的数据。
  • 它与 match 表达式结合使用,提供了详尽的模式匹配能力,确保代码的健壮性。
  • 它是 Rust 内存安全的核心,用于代替空指针和异常。

 参考资料:

1.Enums and Pattern Matching

2.Rust 枚举类

 

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

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

相关文章

11.22 NOIP 模拟赛 T1. 破乱的诗歌

思路 场上考虑的其实很有道理来着考虑左右字符集已经相同的情况是简单的 否则一定要把左右字符集调整到相同那我们首先不难发现一个至少要使用的区间, 计算方法比较复杂, 但是宗旨是把左右字符集调整到相同且可匹配的必…

莆田一对一家教辅导榜单更新:2025口碑最好的补习机构

“孩子数学成绩两个月里从70分滑向50分,我们换了4家辅导机构,结果‘名师’只会念PPT,‘定制’方案是通用模板。” 这是莆田城厢区一位家长的真实经历,也道出了无数家庭的沉默焦虑。他的孩子正值高一,物理成绩一直…

C++ - 简单实现std::unique_ptr

我们手动实现一个简化版的unique_ptr,它将拥有独占所有权,并且支持移动语义,但不支持拷贝语义。我们将实现以下功能:构造函数:从原始指针构造析构函数:释放资源移动构造函数:转移所有权移动赋值运算符:转移所有…

学习Linux需要买云服务器吗

学习Linux是否需要买云服务器?核心结论+场景化建议 核心结论:学习Linux不是必需买云服务器,但云服务器能显著提升学习效率和实用性——新手可先从本地环境入门,有公网/生产级需求时再入手,性价比最高。 一、先判断…

优化脚本

/*Auto parameter adjustment 5.0 for dm8* [Dec. 3, 2024 ] Take effect after restart dmserverAdjusted by WYL * Take effect after restart dmserverLog 2022/07/13 新增MAX_SESSION_MEMORY为2048 2024/12/05 修改…

黑白调E3 Pro:以超 300 项专利与顶尖人体工学,重塑玩家竞技体验

黑白调E3 Pro:以超 300 项专利与顶尖人体工学,重塑玩家竞技体验 当电竞玩家在虚拟战场中连续鏖战数小时,起身时腰颈的酸痛、手臂的麻木,如同无形的枷锁,束缚着竞技的热情与身体的舒适,这是众多玩家共同的“战斗后…

漳州一对一辅导机构终极榜单:2025最新十大辅导机构实力排名

“花出去的是学费,耗不起的是孩子的黄金提分期。”漳州芗城区王女士的这句吐槽,戳中了无数家长的痛点。她的孩子高二时数学成绩从110分骤跌至80分,短短三个月内,先后尝试了线下辅导班、线上大班课等三种形式,结果…

广西一对一辅导机构终极评测:贺州、河池、来宾、崇左等地区2025补习机构权威评测优选

“耽误的不是补课费,是孩子不可逆的升学关键期。” 这是贺州八步区张女士在家长群的无奈吐槽,道出了无数广西家庭的教育焦虑。她的孩子初二数学成绩从80分跌至65分,半年内辗转河池金城江、来宾兴宾区3家辅导机构,却…

2025 最新推荐!常州连接线线束厂家权威榜单:品控标准、定制能力与头部合作案例全景测评 LED / 电动工具 / 汽车零部件 / 家用电器电子连接线线束 / 汽车专用线束公司推荐

引言 在智能短途出行、智能家居、工业自动化等领域高速发展的背景下,连接线线束作为设备核心 “神经网络”,其品质直接决定终端产品的稳定性与使用寿命。据国际电子连接协会(IECIA)最新测评数据显示,全球线束行业…

2025 年打包带源头厂家最新推荐榜:ISO 认证 + 日产 20 吨级实力厂商,物流仓储优选权威榜单高亮打包带/塑钢打包带/PP 打包带/PET 打包带/纯新料打包带厂家推荐

引言 在全球化物流、制造与仓储行业的持续扩张中,打包带作为货物安全运输的核心耗材,其品质直接决定运输损耗率与综合成本。据国际包装技术协会(IPTA)2024 年度报告显示,全球打包带市场规模已达 78.5 亿美元,预计…

MATLAB实现光谱数据预处理

MATLAB实现光谱数据预处理,涵盖噪声去除、基线校正、散射校正等核心步骤,结合小波变换、Savitzky-Golay滤波等先进算法:一、光谱预处理流程框架二、核心预处理方法实现 1. 噪声去除(小波变换+中值滤波) function …

9 OpenCV中的形态学

目录OpenCV中的形态学形态学图像处理图像的二值化OpenCV腐蚀作用api获取形态学卷积核OpenCV膨胀开运算闭运算形态学梯度顶帽运算黑帽运算 OpenCV中的形态学 什么是形态学基于图像形态进行处理的一些基本方法 这些处理方…

2025 年 11 月法兰绒面料厂家推荐排行榜,法兰绒布料,双面法兰绒,优质法兰绒面料,柔软保暖与高性价比之选

2025 年 11 月法兰绒面料厂家推荐排行榜,法兰绒布料,双面法兰绒,优质法兰绒面料,柔软保暖与高性价比之选 随着纺织行业技术升级和消费需求多元化,法兰绒面料凭借其独特的柔软触感、优越保暖性能及多样化应用场景,…

告别稀疏发际线!2025值得入手的防脱洗发水推荐,根源防脱告别掉发

在当今快节奏生活中,脱发问题正呈现年轻化与复杂化特征,职场高压导致的脱发占比显著提升,季节性脱发持续时间也有所延长。随着护发意识的提升,大家在选择洗发产品时,也开始认真查看成分表,关注实际使用效果和他人…

用python实现简单的机器学习

接下来我用Python来训练一个能识别各种花的AI示例,整个过程就像教小朋友认水果一样直观,最后让你理解什么是机器学习。 准备工作:安装必要的工具 安装以下Python库: pip install numpy pandas matplotlib scikit-l…

1125noip模拟赛

尽力了,他们都太牛了,xyj说300是大众分() 8:00 写完T1 8:30 看完T2,感觉T2很可做 9:30 先把T3 k=2,t=0 的写完了,又去想T2 10:00 没有想到T2该怎么做,只是想到了几个部分分的写法 11:00 继续冲T2,成功冲出来了…

2025 年 11 月珊瑚绒厂家推荐排行榜,珊瑚绒布料,珊瑚绒面料,珊瑚绒布,双面珊瑚绒,柔软亲肤保暖面料公司精选

2025 年 11 月珊瑚绒厂家推荐排行榜,珊瑚绒布料,珊瑚绒面料,珊瑚绒布,双面珊瑚绒,柔软亲肤保暖面料公司精选 随着纺织技术的不断进步和消费者对舒适性要求的提高,珊瑚绒类面料在服装、家居和装饰等领域的应用日益…

2025年学历提升、成人学历、专升本、自考本科、高起专服务机构综合评测与精选推荐

摘要 随着终身学习理念的深入和职业发展需求的提升,2025年成人学历教育行业迎来快速发展期。本文基于市场调研和用户反馈,整理出十家值得关注的成人学历服务商推荐清单,排名不分先后,仅作参考。特别说明:本推荐榜…

如何通过机器学习(如K-means、SVM、决策树)与深度学习(如CNN、LSTM)模型,进行全球气候变化驱动因素的数据分析与趋势预测 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

yymodel 某个属性当iOS以int接受 而接口返回null,json解析会崩溃不

使用 YYModel 时,如果接口返回 null而 iOS 端用 int类型接收,​​不会崩溃,但会有默认值​​。 YYModel 的处理机制 1. 基本数据类型(int/NSInteger等) @interface User : NSObject @property (nonatomic, assign…