Rust之枚举与模式匹配

这篇具有很好参考价值的文章主要介绍了Rust之枚举与模式匹配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

枚举类型,简称枚举,允许列举所有可能的值来定义一个类型。

1、定义枚举:

枚举类型:已知所有可能的值,并且所有值的出现是互斥的,即每次只能取一种可能的值,才使用枚举类型。
示例:声明一个枚举

enum IpAddrKind{
	V4,
	V6,
}

使用IpAddrKind中的两个变体来创建实例:

let four = IpAddrKind::V4;
let six = IpAddrKind::V6;

注:枚举的变体全部处于其标识符的命名空间内,并使用两个冒号将标识符和变体分隔开。
枚举允许直接将其相关联的数据嵌入枚举变体内,这样就可以更简单的表达意思。示例:

enum IpAddr{
	V4(String),
	V6(String),
}
let home = IpAddr:V4(String::from("127.0.0.1"));
let loopback = IpAddr::V6(String::from("::1"));

可以直接将数据附加到枚举的每个变体中,这样就不需要额外的使用结构体了。
使用枚举还可以让每个变体拥有不同类型和数量的关联数据。
示例:

enum IpAddr{
	V4(u8,u8,u8,u8),
	V6(String),
}
let home = IpAddr::V4(127.0.0.1);
let loopback = IpAddr::V6(String::from("::1"));

2、Option枚举:

在Rust中虽然没有空值的概念,但是却提供了一个拥有类似概念的枚举,可以使用它来标识一个值的无效或缺失。这个枚举就是Option<T>,它在标准库中的定义如下:

enum Option<T>{
	Some(T),
	None,
}

这里的<T>表示一种泛型,即可以指代任意类型的数据。
因为Option<T>T(T表示任意数据类型)是不同的类型,因此编译器不允许像使用普通值一样去直接使用Option<T>的值。

3、控制流运算符match:

Rust中存在一个控制流运算符:match,它允许将一个值与一系列的模式相比较,并根据匹配的模式执行相应的代码。模式可以由字面量、变量名、通配符和其他组成。
示例:

enum Coin {
	Penny,
	Nickel,
	Dime,
	Quarter,
}
fn value_in_cents(coin:Coin) -> u32{
	match coin{
		Coin::Penny => 1,
		Coin::Nickel => 5,
		Coin::Dime => 10,
		Coin::Quarter => 25,
	}
}

使用match进行匹配时,必须穷举所有的可能,来确保代码的合法性。

4、_通配符:

当不需要处理所有可能的值的时候,可以使用_通配符去匹配其余值。
示例:

let some_u8_value = 0u8;
match some_u8_value{
	1 => println!("one"),
	3 => println!("three"),
	5 => println!("five"),
	_ => (),
}

这里的_可以匹配任何值,将_放在其他分支后面,可以帮助匹配所有没有被显式指定出来的情形。

5、简单控制流if let

if let能够用来处理只关心某一种匹配而忽略其他匹配的情况。
示例:
使用match进行匹配:

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

使用if let进行改写:文章来源地址https://www.toymoban.com/news/detail-610584.html

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

到了这里,关于Rust之枚举与模式匹配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Rust编程语言入门之模式匹配

    模式是Rust中的一种特殊语法,用于匹配复杂和简单类型的结构 将模式与匹配表达式和其他构造结合使用,可以更好地控制程序的控制流 模式由以下元素(的一些组合)组成: 字面值 解构的数组、enum、struct 和 tuple 变量 通配符 占位符 想要使用模式,需要将其与某个值进行

    2023年04月22日
    浏览(91)
  • 【Rust】Rust学习 第十三章Rust 中的函数式语言功能:迭代器与闭包

    Rust 的设计灵感来源于很多现存的语言和技术。其中一个显著的影响就是  函数式编程 ( functional programming )。函数式编程风格通常包含将函数作为参数值或其他函数的返回值、将函数赋值给变量以供之后执行等等。 更具体的,我们将要涉及: 闭包 ( Closures ),一个可以储

    2024年02月12日
    浏览(51)
  • Rust 程序设计语言学习——基础语法

    Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率,它的执行效率也是令人称赞的,是一种少有的兼顾开发效率和执行效率的语言。 Rust 语言由 Mozilla 开发,最早发布于 2014 年 9 月。Rust 的编译器是在 MIT License 和 Apache License 2.0 双重协议声明下的免费开源软

    2024年01月22日
    浏览(50)
  • 【Rust】Rust学习 第十八章模式用来匹配值的结构

    模式是 Rust 中特殊的语法,它用来匹配类型中的结构,无论类型是简单还是复杂。结合使用模式和  match  表达式以及其他结构可以提供更多对程序控制流的支配权。模式由如下一些内容组合而成: 字面值 解构的数组、枚举、结构体或者元组 变量 通配符 占位符 这些部分描

    2024年02月11日
    浏览(43)
  • Rust -- 模式与匹配

    1. 模式 匹配类型中的结构(数据的形状),结合 模式和match表达式 提供程序控制流的支配权 模式组成内容 字面量 解构的数组、枚举、结构体、元组 变量 通配符 占位符 流程:匹配值 -- 是否拥有正确的数据 -- 运行特定的代码 2. 使用模式的位置 match分支:由match、一个匹

    2023年04月26日
    浏览(36)
  • 【Rust 基础篇】Rust 模式:高效、安全和灵活的匹配工具

    在编程中,经常需要对数据进行匹配和处理,例如从一个复杂的数据结构中提取特定的值,或者根据不同的情况执行不同的逻辑。Rust是一门现代的系统编程语言,它引入了一种称为\\\"模式\\\"(Pattern)的强大特性,使得数据的匹配和处理变得高效、安全和灵活。本篇博客将深入探

    2024年02月08日
    浏览(72)
  • RUST 每日一省:模式匹配

            我们经常使用let 语句创建新的变量绑定——但是 let 的功能并不仅限于此。事实上, let 语句是一个模式匹配语句。它允许我们根据内部结构对值进行操作和判断,或者可以用于从代数数据类型中提取值。         如上所示,通过第二句,把一个组合数据结构

    2024年02月09日
    浏览(43)
  • 30天拿下Rust之模式与模式匹配

    概述         Rust语言以其强大的类型系统和所有权模型而著称,而模式与模式匹配则是Rust中一种非常强大且灵活的工具,它允许我们在编译时根据数据的结构进行条件分支处理。在Rust中,模式是一种用于匹配数据的结构,它可以是一个具体的值、一个变量绑定、一个枚

    2024年04月12日
    浏览(41)
  • 【跟小嘉学 Rust 编程】十八、模式匹配(Patterns and Matching)

    【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学 Rust 编程】六、枚举

    2024年02月11日
    浏览(42)
  • C语言学习笔记:枚举(enum)

    ✨博文作者:烟雨孤舟 💖 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介:作为大数据爱好者,以下是个人总结的学习笔记,如有错误,请多多指教! 目录 简介 枚举定义 枚举变量的定义 枚举的应用 枚举enum是英文enumerate的缩写,列

    2024年02月09日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包