22.Rust-枚举

2022-09-04 11:39:37 浏览数 (3)

枚举 enum 关键字允许创建一个从数个不同取值中选其一的枚举类型(enumeration)。任何一个在 struct 中合法的取值在 enum 中也合法。

在日常生活中很常见。比如:1 年有 12 个月,1 周有 7 天。

枚举的定义

代码语言:txt复制
enum 枚举名称{
 variant1,
 variant2,
 ...
}

使用枚举

代码语言:txt复制
枚举名称::variant

#[derive(Debug)]
enum RoadMap {
    Go语言极简一本通,
    Go语言微服务架构核心22讲,
    从0到Go语言微服务架构师,
}

//这是Go语言学习3个阶段

fn main() {
   let level = RoadMap::从0到Go语言微服务架构师;
    println!("level---{:?}",level);
}

#[derive(Debug)] 注解的作用,就是让 派生自Debug`。

Option 枚举

代码语言:txt复制
enum Option<T> {
   Some(T),      // 用于返回一个值
   None          // 用于返回 null,用None来代替。
}

Option 枚举经常用在函数中的返回值,它可以表示有返回值,也可以用于表示没有返回值。如果有返回值。可以使用返回 Some(data),如果函数没有返回值,可以返回 None。

代码语言:txt复制
fn getDiscount(price: i32) -> Option<bool> {
    if price > 100 {
        Some(true)
    } else {
        None
    }
}

let p=666;  //输出 Some(true)
// let p=6;//输出 None
let result = getDiscount(p);
println!("{:?}",result)

match 语句

判断一个枚举变量的值,唯一操作符就是 match。

代码语言:txt复制
fn print_road_map(r:RoadMap){
    match r {
        RoadMap::Go语言极简一本通=>{
            println!("Go语言极简一本通");
        },
        RoadMap::Go语言微服务架构核心22讲=>{
            println!("Go语言微服务架构核心22讲");
        },
        RoadMap::从0到Go语言微服务架构师=>{
            println!("从0到Go语言微服务架构师");
        }
    }
}
print_road_map(RoadMap::Go语言极简一本通);//输出 Go语言极简一本通
print_road_map(RoadMap::Go语言微服务架构核心22讲);//输出 Go语言微服务架构核心22讲
print_road_map(RoadMap::从0到Go语言微服务架构师);//输出 从0到Go语言微服务架构师

带数据类型的枚举

代码语言:txt复制
enum 枚举名称{
    variant1(数据类型1),
    variant2(数据类型2),
    ...
}
代码语言:txt复制
#[derive(Debug)]
enum StudyRoadMap{
    Name(String),
}

let level3 = StudyRoadMap::Name(String::from("从0到Go语言微服务架构师"));
match level3 {
    StudyRoadMap::Name(val)=>{
        println!("{:?}",val);
    }
}

//输出 "从0到Go语言微服务架构师"

0 人点赞