今天学习的内容是 Rust 中的枚举类型

枚举类型

枚举类型也叫枚举,用来组织有限的值,归为一个类型。

使用 enum 关键字来声明一个枚举类型,枚举类型的成员称为变体

枚举有多种不同的写法,包括:

  • 不带值的枚举
  • 带值的枚举
  • 带参数的枚举

比如,定义一个行星类型的枚举,它的成员有两个:Mars 和 Earth:

enum Planet {Mars,Earth,
}

如果没有给成员显式赋值,那么枚举值默认从 0 开始存储。

在声明枚举类型时,可以显式的给成员赋值。比如定义一个 HTTP 响应的状态码:

enum State {OK: 200,NotFound: 404,Error: 500,
}

在声明枚举类型时,还可以给成员带上参数,类似于函数的调用。

enum IpAddr {IPv4(u8, u8, u8, u8),IPv6(u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8),
}

这种类型的枚举是 Rust 和其他语言差别最大的一种枚举。

模式匹配

要使用枚举类型,需要使用模式匹配。

enum IpAddr {  IPv4(u8, u8, u8, u8),  IPv6(u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8, u8),
}fn main() {let localhost: IpAddr = IpAddr::IPv4(127, 0, 0, 1);match localhost {IpAddr::IPv4(a, b, c, d) => {println!("{} {} {} {}", a, b, c, d)}_ => {} // 任何非 IPv4 类型走这条分支}
}

小结

Rust 中的枚举类型,类似结构体类型,主要用来创建用户自定义的类型,不同之处是它会包含所有可被列举的值。要使用枚举类型的值,需要配合模式匹配语法。

Rust(9):枚举类型相关推荐

  1. rust笔记6 枚举类型

    基础概念 rust的枚举类型相对于C++来说,有更强大的表现能力,先给出最基本的定义方式: enum IP{V4,V6, }fn main() {let ipv4 = IP::V4;let ipv6 ...

  2. 《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)

        新手入门:C/C++中枚举类型(enum) 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型.之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来. ...

  3. ASP.NET中绑定枚举类型

    在项目开发中好多地方用了枚举,要把枚举显示到下拉列表框中我们平常的方法就是在下拉列表控件中一个一个添加进去!这样做也行但如果我的枚举类型中的枚举值一旦改变,那么你就得满世界的去找然后再修改很麻烦. 这 ...

  4. 深度分析Java的枚举类型——枚举的线程安全性及序列化问题

    点击关注,快速进阶高级架构师 作者:Hollis 写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为 ...

  5. C++ 枚举类型基本知识

    1.定义 enum <类型名> {<枚举常量表>}; 2.说明 关键字enum--指明其后的标识符是一个枚举类型的名字. 枚举常量表--由枚举常量构成.枚举常量只能以标识符形式 ...

  6. Java基础教程(15)--枚举类型

      枚举类型定义了一个枚举值的列表,每个值是一个标识符.例如,下面的语句声明了一个枚举类型,用来表示星期的可能情况: public enum Day {SUNDAY, MONDAY, TUESDAY, ...

  7. 【C++】枚举类型应用

    运行环境:VS2017 可以参考:[C++]枚举类型 医院内科有A,B,C,D,E,F,G共七位医生,每人在一周内要值一次夜班,排班的要求: (1)A比C晚一天 (2)D比E晚两天 (3)B比G早三天 ...

  8. 求你了,不要再在对外接口中使用枚举类型了!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 最近,我们的线上环境出现了一个问题,线上代码在执行过程中抛 ...

  9. JAVA高级特性--自动拆箱-装箱,枚举类型

    基本数据类型转换为引用类型对象 一个自动装箱的例子 Integer i=10;相当于 Integer i=new Integer(10); 一个自动拆箱的例子 Integer m=10;int n=m ...

最新文章

  1. 技术宅硬核跨年,DIY墨水屏日历:自动刷新位置、天气,随机播放2000多条「毒鸡汤」| 开源...
  2. Java常用类之String类练习
  3. 流利说签约神策数据,打造智能时代 Top 级在线英语学习平台
  4. JavaScript基础03【算数运算符、一元运算符、自增and自减】
  5. 牛客题霸 [容器盛水问题] C++题解/答案
  6. -javaagent:_从javaagent迁移到JVMTI:我们的经验
  7. 计算机网络项目——最小网元设计(前情提要和项目概述)
  8. (pytorch-深度学习系列)深度卷积神经网络AlexNet
  9. 如何理解产品经理的核心竞争力
  10. 这篇文章,专治MQ中间件各种疑难杂症
  11. POI读取单元格信息及单元格公式
  12. 使用sync-request和cheerio写爬虫
  13. 多表关联更新,UPDATE FROM用法
  14. zynq+linux固化程序,MiZ702学习笔记6——ZYNQ如何固化程序
  15. 【转】成为一名推荐系统工程师永远都不晚
  16. Vue项目开发相关问题总结
  17. 如何在word里插入矢量图
  18. Java程序员进阶书籍 ,看这11本书就够了
  19. 我的ubuntu系统配置-重装到完整配置ubuntu环境-完整配置ubuntu-ubuntu-install-final
  20. 如何将产品发布到App Store上?

热门文章

  1. 【Spark NLP】第 8 章:使用 Keras 进行序列建模
  2. 各种Lisp系语言大检阅
  3. Unity3d中的走路动画
  4. 互联网产品经理职业规划图(转载)
  5. java中实现的十进制转换成二进制的简单代码
  6. 【随笔】写在2020除夕之夜
  7. GLUT之鼠标事件两点画线 4
  8. hdu5594 ZYB's Prime
  9. 在 Excel 2007中手动为坐标图添加坐标轴标题
  10. 基于ssm的基金分析系统的设计与实现-计算机毕业设计