- Rust 教程
- Rust - 首页
- Rust - 简介
- Rust - 环境设置
- Rust - HelloWorld 例子
- Rust - 数据类型
- Rust - 变量
- Rust - 常量
- Rust - 字符串
- Rust - 运算符
- Rust - 决策制定
- Rust - 循环
- Rust - 函数
- Rust - 元组
- Rust - 数组
- Rust - 所有权
- Rust - 借用
- Rust - 切片
- Rust - 结构体
- Rust - 枚举
- Rust - 模块
- Rust - 集合
- Rust - 错误处理
- Rust - 泛型类型
- Rust - 输入输出
- Rust - 文件输入/输出
- Rust - 包管理器
- Rust - 迭代器和闭包
- Rust - 智能指针
- Rust - 并发
- Rust 有用资源
- Rust - 快速指南
- Rust - 有用资源
- Rust - 讨论
Rust - 枚举
在 Rust 编程中,当我们需要从一系列可能的变体中选择一个值时,我们使用枚举数据类型。枚举类型使用 enum 关键字声明。以下是 enum 的语法:
enum enum_name { variant1, variant2, variant3 }
示例:使用枚举
此示例声明了一个枚举 - GenderCategory,它具有 Male 和 Female 两种变体。print! 宏显示枚举的值。编译器会抛出一个错误 trait std::fmt::Debug is not implemented for GenderCategory。#[derive(Debug)] 属性用于抑制此错误。
// The `derive` attribute automatically creates the implementation // required to make this `enum` printable with `fmt::Debug`. #[derive(Debug)] enum GenderCategory { Male,Female } fn main() { let male = GenderCategory::Male; let female = GenderCategory::Female; println!("{:?}",male); println!("{:?}",female); }
输出
Male Female
结构体和枚举
以下示例定义了一个 Person 结构体。gender 字段的类型为 GenderCategory(这是一个枚举),可以赋值为 Male 或 Female。
// The `derive` attribute automatically creates the implementation // required to make this `enum` printable with `fmt::Debug`. #[derive(Debug)] enum GenderCategory { Male,Female } // The `derive` attribute automatically creates the implementation // required to make this `struct` printable with `fmt::Debug`. #[derive(Debug)] struct Person { name:String, gender:GenderCategory } fn main() { let p1 = Person { name:String::from("Mohtashim"), gender:GenderCategory::Male }; let p2 = Person { name:String::from("Amy"), gender:GenderCategory::Female }; println!("{:?}",p1); println!("{:?}",p2); }
此示例创建了 Person 类型的 p1 和 p2 对象,并为这些对象的名称和性别属性进行了初始化。
输出
Person { name: "Mohtashim", gender: Male } Person { name: "Amy", gender: Female }
Option 枚举
Option 是 Rust 标准库中预定义的枚举。此枚举有两个值 - Some(data) 和 None。
语法
enum Option<T> { Some(T), //used to return a value None // used to return null, as Rust doesn't support the null keyword }
这里,类型 T 代表任何类型的数值。
Rust 不支持 null 关键字。在 enum Option 中,None 值可由函数用来返回空值。如果有数据要返回,则函数可以返回 Some(data)。
让我们通过一个例子来理解:
程序定义了一个函数 is_even(),其返回类型为 Option。该函数验证传递的值是否为偶数。如果输入为偶数,则返回 true 值,否则函数返回 None。
fn main() { let result = is_even(3); println!("{:?}",result); println!("{:?}",is_even(30)); } fn is_even(no:i32)->Option<bool> { if no%2 == 0 { Some(true) } else { None } }
输出
None Some(true)
匹配语句和枚举
match 语句可用于比较存储在枚举中的值。以下示例定义了一个函数 print_size,它将 CarType 枚举作为参数。该函数将参数值与预定义的一组常量进行比较,并显示相应的消息。
enum CarType { Hatch, Sedan, SUV } fn print_size(car:CarType) { match car { CarType::Hatch => { println!("Small sized car"); }, CarType::Sedan => { println!("medium sized car"); }, CarType::SUV =>{ println!("Large sized Sports Utility car"); } } } fn main(){ print_size(CarType::SUV); print_size(CarType::Hatch); print_size(CarType::Sedan); }
输出
Large sized Sports Utility car Small sized car medium sized car
带有 Option 的匹配
返回 Option 类型的 is_even 函数示例也可以使用 match 语句实现,如下所示:
fn main() { match is_even(5) { Some(data) => { if data==true { println!("Even no"); } }, None => { println!("not even"); } } } fn is_even(no:i32)->Option<bool> { if no%2 == 0 { Some(true) } else { None } }
输出
not even
匹配 & 带有数据类型的枚举
可以为枚举的每个变体添加数据类型。在以下示例中,枚举的 Name 和 Usr_ID 变体分别为 String 和整数类型。以下示例显示了使用带有数据类型的枚举的 match 语句。
// The `derive` attribute automatically creates the implementation // required to make this `enum` printable with `fmt::Debug`. #[derive(Debug)] enum GenderCategory { Name(String),Usr_ID(i32) } fn main() { let p1 = GenderCategory::Name(String::from("Mohtashim")); let p2 = GenderCategory::Usr_ID(100); println!("{:?}",p1); println!("{:?}",p2); match p1 { GenderCategory::Name(val)=> { println!("{}",val); } GenderCategory::Usr_ID(val)=> { println!("{}",val); } } }
输出
Name("Mohtashim") Usr_ID(100) Mohtashim