当前位置: 首页 > news >正文

06 Rust 枚举类

简单使用

enum Person {Good,Bad
}let p1 = Person::Good;

为枚举成员添加属性

#[derive(Debug)]
enum Person {Good(String),           // 元组的方式描述属性Bad { name: String },   // 结构体方式描述属性, 可为属性命名
}fn main() {let p1 = Person::Good("Jim".to_string());let p2 = Person::Bad {name: "Tom".to_string(),};match p1 {// 元组属性名称可自定义化, 但顺序需一致Person::Good(n) => {println!("{}, Good person", n);},// 结构体形式名称需和定义时一致Person::Bad {name} => {println!("{}, Bad person", name);}}// 使用 if let 语法进行枚举类型判断if let Person::Good(_) = p2 {println!("Good person");} else {println!("Not a good person");}
}

Option 枚举类

Rust 在语言层面彻底不允许空值 null 的存在,但无奈null 可以高效地解决少量的问题,为此引入了 Option 枚举类

enum Option<T> {Some(T),None,
}
let opt = Option::Some("Hello");// 在使用前进行判断
if let Option::None = opt {println!("opt is none!");return;
}// 通过 unwrap 获取 Some 内部实际值
println!("{}", opt.unwrap());// 初始值为空的 Option 必须明确类型
let opt: Option<&str> = Option::None;// 由于 Option 是 Rust 编译器默认引入的
// 在使用时可以省略 Option:: 直接写 None 或者 Some()
match opt {Some(value) => println!("{}", value),None => println!("opt is None"),
}

相关文章:

  • dapper使用Insert或update时部分字段不映射到数据库
  • 什么是Symbol?在实际开发中怎么用?
  • 软件设计师——信息安全(一)
  • java.lang.ClassNotFoundException:javax.xml.bind.DatatypeConverter 报错解决
  • 数据库原理与应用——简答题练习(数据管理技术发展、数据库主要特征、数据模型、关系模型、实体性之间的关系、DBMS的功能、相关术语解释、数据库系统)
  • arcgis api for js 中使用API的代理页面(跨越配置)
  • 【docker 】Dockerfile指令学习
  • 爬虫工作量由小到大的思维转变---<第三章 搞多大的盘>
  • c++程序设计定义一个 (图书)类,在该类定义中包括
  • 【数据结构】树状数组总结
  • 推荐一款好用的包含表格识别的OCR网站
  • Debian系统安装OpenVPN
  • javaWebssh汽车销售管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计
  • Flink系列之:窗口关联
  • HTML面试题
  • php的引用
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • E-HPC支持多队列管理和自动伸缩
  • hadoop集群管理系统搭建规划说明
  • JSDuck 与 AngularJS 融合技巧
  • KMP算法及优化
  • LeetCode算法系列_0891_子序列宽度之和
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 翻译--Thinking in React
  • 分布式事物理论与实践
  • 基于 Babel 的 npm 包最小化设置
  • 译自由幺半群
  • 用 Swift 编写面向协议的视图
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 原生js练习题---第五课
  • - 转 Ext2.0 form使用实例
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #{}和${}的区别是什么 -- java面试
  • ${ }的特别功能
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (pojstep1.1.2)2654(直叙式模拟)
  • (二)PySpark3:SparkSQL编程
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (小白学Java)Java简介和基本配置
  • (一)认识微服务
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET Reactor简单使用教程
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET中使用Redis (二)
  • /3GB和/USERVA开关
  • @Controller和@RestController的区别?