写点什么

Rust 从 0 到 1- 枚举 -if let 控制流

用户头像
关注
发布于: 2021 年 04 月 20 日
Rust从0到1-枚举-if let控制流

if let 让我们可以更简洁的来处理只匹配一个“模式”而忽略其他“模式”的场景,我们先看下不使用 if let :

let mut count = 0;match coin {    Coin::Quarter(state) => println!("State quarter from {:?}!", state),    _ => (),}
复制代码

我们只想在匹配 Quarter 时进行操作,不想处理任何其他值或 None 值。但是为了满足 match 表达式穷尽性的要求,必须在最后加上 _ => (),有点啰嗦,不是吗。if let 提供了一种更简洁的方式:

if let Coin::Quarter(state) = coin {    println!("State quarter from {:?}!", state);}
复制代码

if let <模式>=<表达式>,使用 if let 意味着更简洁,可以认为是 match 的一个语法糖,但是,这样会失去 match 对穷尽性的强制检查,在这一点上,需要大家结合实际的场景去权衡。

同时可以在 if let 中使用 else,效果和 match 中的 _ 分支相同:

let mut count = 0;if let Coin::Quarter(state) = coin {    println!("State quarter from {:?}!", state);} else {    count += 1;}
复制代码


总结

我们介绍了如何使用枚举来创建自定义类型以及 Rust 标准库中的 Option<T> 类型。同时也介绍了经常和枚举结合使用的 match 和 if let 控制流。使用结构体和枚举创建自定义类型可以保证我们的 API 的类型安全:编译器会确保函数只会得到它期望的类型的值。

    下面将介绍 Rust 中的“模块”,它帮助我们组织良好的 API:使用起来直观并且只向用户暴露需要的部分。

发布于: 2021 年 04 月 20 日阅读数: 9
用户头像

关注

公众号"山 顽石"欢迎大家关注;) 2021.03.23 加入

IT老兵,关注Rust、Java、前端、架构、大数据、AI、算法等;平时喜欢美食、旅游、宠物、健身、篮球、乒乓球等。希望能和大家交流分享。

评论

发布
暂无评论
Rust从0到1-枚举-if let控制流