定义枚举
- IP地址:IPv4、IPv6
enum IpAddrKindf {
V4,
V6
}
枚举值
- let four =lpAddrKind::V4;
- let six = lpAddrKind::V6;
将数据附加到枚举的变体中
- 优点:
- 不需要额外使用 struct
- 每个变体可以拥有不同的类型以及关联的数据量
enum IpAddrKindf {
V4(u8,u8,u8,u8),
V6(String)
}
为枚举定义方法
- 也使用impl关键字
Option 枚举
- 定义于标准库中
- 在 Prelude(预导入模块)中
- 描述了:某个值可能存在(某种类型) 或不存在的情况
Rust 没有 Null
- 其它语言中:
- Null 是一个值,它表示“没有值”
- 一个变量可以处于两种状态: 空值 (null)、非空
- Null 引用: Billion Dollar Mistake
- Null 的问题在于:当你尝试像使用非 Null 值那样使用 Nul 值的时候,就会引起某种错误
- Null的概念还是有用的:因某种原因而变为无效或缺失的值
Rust 中类似 Null 概念的枚举 – Option
- 标准库中的定义:
enum Option<T> {
Some(T),
None
}
- 它包含在 Prelude (预导入模块) 中。可直接使用:
- Option
- Some(T)
- None
- Option
fn main() {
let some_number=Some(5);
let some_string=Some("A String");
let absernt_number:Option<32>=None;
}
Option
比 Null 好在哪?
比 Null 好在哪?
- Option
和T是不同的类型,不可以把 Option
直接当成T
- 若想使用 Option
中的 T,必须将它转换为 T
- 而在C# 中:
- string a = null;
- string b=a +“12345”
控制流运算符 match
- 允许一个值与一系列模式进行匹配,并执行匹配的模式对应的代码
- 模式可以是字面值、变量名、通配符…
enum Coin {
Penny,
Nickel,
Dime,
Quarter
}
fn value_in_cents(coin:Coin)->u8 {
match coin {
Coin::Penny=>1,
Coin::Nickel=>5,
Coin::Dime=>10,
Coin::Quarter=>25
}
}
绑定值的模式
- 匹配的分支可以绑定到被匹配对象的部分值。
- 因此,可以从 enum 变体中提取值
enum UsState {
Alabama,
Alaska
}
enum Coin {
Quarter(UsState)
}
fn value_in_cents(coin:Coin)->u8 {
match coin {
Coin::Quarter(UsState)=>{
}
}
}
匹配Option
fn plus_one(x:Option<i32>)->Option<i32> {
match x {
None=>None,
Some(i)=>Some(i+1)
}
}
match 匹配必须穷举所有的可能
- _通配符:替代其余没列出的值
fn plus_one(x:Option<i32>)->Option<i32> {
match x {
None=>None,
_ =>()
}
}
if let
- 处理只关心一种匹配而忽略其它匹配的情况
let v=Some(0u8);
if let Some(3) = v {
println!("three");
}
- 更少的代码,更少的缩进,更少的模板代码
- 放弃了穷举的可能
- 可以把iflet 看作是 match 的语法糖
- 搭配 else
let v=Some(0u8);
if let Some(3) = v {
println!("three");
}else {
println!("others");
}
原文地址:http://www.cnblogs.com/huiteresa/p/16930373.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性