Rust 教程

浏览27777
更新时间2025-08-27

在 Rust 编程中,当我们必须从可能的变体列表中选择一个值时,我们使用枚举数据类型。 枚举类型是使用enum关键字声明的。 以下是枚举的语法 −

enum enum_name {
   variant1,
   variant2,
   variant3
}

示例:使用枚举

该示例声明了一个枚举 − GenderCategory,有"Male(男性)"和"Female(女性)"等变体。 print! 宏显示枚举的值。 编译器将抛出错误:trait std::fmt::Debug is not Implemented for GenderCategory。 属性#[derive(Debug)] 用于抑制此错误。

// `derive` 属性自动创建实现
// 需要使用"fmt::Debug"来打印这个"enum"。
#[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 作为值。

// `derive` 属性自动创建
implementation
// 需要使这个"enum"可打印
`fmt::Debug`.

#[derive(Debug)]
enum GenderCategory {
   Male,Female
}

// `derive` 属性自动创建实现
// 需要使用"fmt::Debug"来打印这个"struct"。
#[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 是 Rust 标准库中预定义的枚举。 该枚举有两个值 − Some(data) 和 None。

语法

enum Option<T> {
   Some(T),      // 用于返回一个值
   None          // 用于返回 null,因为 Rust 不支持 null 关键字
}

这里,类型T表示任意类型的值。

Rust 不支持 null 关键字。函数可以使用 enumOption 中的值 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(选项)

is_even函数的例子,返回Option类型,也可以用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 变体分别是字符串和整数类型。 以下示例显示了将 match 语句与具有数据类型的枚举一起使用。

// `derive` 属性自动创建实现
// 需要使用"fmt::Debug"来打印这个"enum"。
#[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

相关视频

更多

免费

phpStudy极速入门视频教程
初级phpStudy极速入门视频教程

54.6万次学习

收藏

免费

phpStudy V8 视频教程
初级phpStudy V8 视频教程

38.8万次学习

收藏

免费

小皮面板使用视频教程
初级小皮面板使用视频教程

21.6万次学习

收藏

免费

好课诞生记
初级好课诞生记

7.1万次学习

收藏

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

65万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

41.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

76.8万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

64.2万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

24.4万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

36.3万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

133.5万人学习

热门下载

更多
phpStudy 2018最新版
phpStudy 2018最新版

集成PHP7,16种组合,超全大合集

下载

VC9 32位
VC9 32位

VC9 32位 phpstudy集成安装环境运行库

下载

VC11 32位
VC11 32位

VC11 32位 phpstudy集成安装环境运行库​

下载

php程序员工具箱完整版
php程序员工具箱完整版

程序员工具箱 v1.0 php集成环境

下载

VC14 32位
VC14 32位

VC14 32位 phpstudy安装环境运行库

下载

SublimeText3汉化版
SublimeText3汉化版

中文版,非常好用

下载

Notepad++ Windows版
Notepad++ Windows版

Notepad++ 8.9.7 Windows版官方安装包,适合 Windows 用户进行代码编辑、文本处理、语法高亮和插件扩展配置。

下载