基础概念

rust的枚举类型相对于C++来说,有更强大的表现能力,先给出最基本的定义方式:

enum IP{V4,V6,
}fn main() {let ipv4 = IP::V4;let ipv6 = IP::V6;
}

枚举类型可以有不同的数据类型,并存储对应的数据,给出代码实例:

enum IP {V4(u8, u8, u8, u8),V6(String)
}fn main() {let ipv4 = IP::V4(127, 0, 0, 0);let ipv6 = IP::V6(String::from("::1"));
}

枚举类型可以有自己的impl块,代码实例:

enum Message {Quit,Move {x:i32, y: i32},Write (String),ChangeColor(i32, i32, i32),
}impl Message {fn call(&self) {}
}fn main() {let m = Message::Write(String::from("hello"));m.call();
}

rust中没有null reference的概念,不过有很多时候我们需要None的判别,下面给出一个可行的方式:

// enum Option<T> {   // 这是标准库的方式
//    Some(T),
//   None,
// }fn main() {let some_number = Some(5);let some_string = Some("a String");let absent_number: Option<i32> = None;  // 定义的空类型
}

注意,上面的some_number不能直接和i32相加,而是需要一些类型转化。

match匹配块

给出代码实例:

enum Coin {Penny,Nickel,Dime,Quarter,
}fn value_in_cents(coin: Coin) -> u8 {match coin {  Coin::Penny => {  // 可以使表达式,注意箭头的表达方式println!("Lucky penny");1},Coin::Nickel=> 5,Coin::Dime => 10,Coin::Quarter => 25,}
}fn main() {let coin = Coin::Penny;println!("{}", value_in_cents(coin));
}

match中的值绑定,给出代码实例:

#[derive(Debug)]   // 为了trait使用,暂时不必管
enum UsState {Alabama,Alaska
}enum Coin {Penny,Nickel,Dime,Quarter(UsState),
}fn value_in_cents(coin: Coin) -> u8 {match coin {Coin::Penny => 1,Coin::Nickel => 5,Coin::Dime => 10,Coin::Quarter(state) => {  // state是对应的绑定值println!("State quarter from {:?}", state);  // 输出绑定值的方式25}}
}fn main() {let coin = Coin::Quarter(UsState::Alaska);  // 定义枚举,并绑定数据println!("{}", value_in_cents(coin));
}

在给出一个代码实例,如果是空直接返回,否则返回+1

fn plus_one(x: Option<i32>) -> Option<i32> {match x {None => None,  // 空的匹配Some(i) => Some(i + 1),}
}fn main() {let five = Some(5);let six = plus_one(five);let none = plus_one(None);
}

可以使用_来表示任意匹配,简单的例子:

match x {1 => println!("hello world"),_ => println!("nothing");
}

if-let语句的表达

这么做的最有价值的地方,在于简化表达方式:

let some_u8_value = Some(0u8);
match some_u8_value {Some(3) => println!("three"),_ => (),
}

这和下面这种方式等价:

let some_u8_value = Some(0u8);
if let Some(3) = some_u8_value {println!("three");
}

唯一的缺陷在于缺少了穷进性检查

rust笔记6 枚举类型相关推荐

  1. rust笔记4 slice类型

    字符切片 先给出个例子: fn main() {let s = String::from("hello world !");let slice0 = &s[0..5];le ...

  2. Rust(9):枚举类型

    今天学习的内容是 Rust 中的枚举类型. 枚举类型 枚举类型也叫枚举,用来组织有限的值,归为一个类型. 使用 enum 关键字来声明一个枚举类型,枚举类型的成员称为变体. 枚举有多种不同的写法,包括 ...

  3. Java基础笔记 – 枚举类型的使用介绍和静态导入

    Java基础笔记 – 枚举类型的使用介绍和静态导入 本文由 arthinking 发表于404 天前 ⁄ Java基础 ⁄ 暂无评论 ⁄ 被围观 1,433 views+ 1.枚举(Enum): JD ...

  4. Java开发笔记(五十六)利用枚举类型实现高级常量

    前面介绍了联合利用final和static可实现常量的定义,该方式用于简单的常量倒还凑合,要是用于复杂的.安全性高的常量,那就力不从心了.例如以下几种情况,final结合static的方式便缺乏应对之 ...

  5. C++ 学习笔记(19)new/delete表达式、定位new、typeid、dynamic_cast、type_info、枚举类型、成员函数指针、union、位域、volatile限定符、链接指示

    C++ 学习笔记(19)new/delete表达式.定位new.typeid.dynamic_cast.type_info.枚举类型.成员函数指针.union.位域.volatile限定符.链接指示 ...

  6. SV学习笔记—结构体及枚举类型及字符串

    目录 1.结构体 1.1 压缩结构体 1.2 非压缩结构体 1.3联合结构体 2.枚举类型 3.字符串 1.结构体 Verilog的最大缺陷之一是没有数据结构,SV中可以使用struct语句创建结构, ...

  7. C++ Primer 5th笔记(chap 19 特殊工具与技术)枚举类型

    1. 枚举类型(enumeration) 将一组整型常量组织在一起. 1.1 限定作用域 的 枚 举 类 型( scoped enumeration) 关 键 字 enum class ( enum ...

  8. 【Swift学习笔记00】——enumeration枚举类型遵循协议protocol

    Apple官方文档:The Swift Programming Language Protocols and Extensions一节的小节练习,要求自行定义一个enumeration枚举类型,并且遵 ...

  9. Java工作笔记-枚举类型反射

    这里枚举类型有自己的反射方式: 这里我先总结下逻辑: 1. 通过getEnumConstatnts返回目前枚举中存在的对象. 2. 通过getMehod获取方法. 3. 最后用这个对象调用其方法. 程 ...

最新文章

  1. SQL获取某个时间段的数据
  2. 使用git提交到github,每次都要输入用户名和密码的解决方法
  3. 尚学堂requireJs课程---2、模块
  4. Android中利用隐式意图发送短信
  5. 腾讯云张贤国:北大将我从少年变成了技术研究者
  6. windows内核情景分析---进程线程1
  7. linux 同步IO: sync msync、fsync、fdatasync与 fflush
  8. 运用begin和end截取值
  9. 如何为新建网站选择好的域名
  10. asp.net 通过IHttpHandler开发接口
  11. C编程语言中运算符介绍
  12. 对C标准中空白字符(空格、回车符(\r)、换行符(\n)、水平制表符(\t)、垂直制表符(\v)、换页符(\f))的理解
  13. Neural Controlled Differential Equations forIrregular Time Series(NIPS2020)
  14. zabbix与nagios对比
  15. PHP interface 接口继承(一丶单接口继承)
  16. 如何挖掘站外营销推广策略
  17. 银行测试(1)-我国的银行类型
  18. 【数据挖掘结果】大数据企业的汇总信息
  19. 获取客户端真实IP方法
  20. 价值链-商业模式名词解释11

热门文章

  1. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——L题 建立火车站
  2. AcWing 103. 电影
  3. 实验4 C++程序的结构(4学时)
  4. pandas中DataFrame的学习笔记~
  5. 创世纪游戏、黄金分割比
  6. [转]论acm与泡妞
  7. 移远EC600低功耗唤醒锁wakelock的使用,QuecPython功耗分析
  8. TLE5012B磁编码器原理及优点,径向充磁磁铁的安装。AS5047、AS5048、AS5600、TLE5012、MA730
  9. 【Linux】完美解决 nginx 的权限问题( Permission denied)
  10. 16个常用的Linux服务器监控命令