【百例RUST - 008】枚举

【百例RUST - 008】枚举

第一章 基础用法

第01节 类似C语言的定义方式

定义格式

复制代码
enum 枚举名称{
    枚举值1,
    枚举值2,
}

案例代码

rust 复制代码
fn main(){
    // 类似于 C语言的定义方式
    #[derive(Debug)]    // 这里的宏, 只是为了方便输出看结果
    enum IpAddKind{
        V4,
        V6,
    }
    
    #[derive(Debug)]   // 这里的宏, 只是为了方便输出看结果
    struct IpAddr{
        kind: IpAddKind,
        address: String,
    }
    
    let i1 = IpAddr{
        kind: IpAddKind::V4,
        address: String::from("127.0.0.1"),
    };
    let i2 = IpAddr{
        kind: IpAddKind::V6,
        address: String::from("fe80::202:b3ff:fe1e:8329"),
    };
    
    println!("i1 = {:#?}", i1);
    println!("i2 = {:#?}", i2);
}

//  i1 = IpAddr {
//      kind: V4,
//      address: "127.0.0.1",
//  }
//  i2 = IpAddr {
//      kind: V6,
//      address: "fe80::202:b3ff:fe1e:8329",
//  }

第02节 rust推荐的定义方式

相同的类型方案

rust 复制代码
fn main(){
    // rust 推荐的定义方式
    #[derive(Debug)]
    enum IpAddKind{
        V4(String),
        V6(String),
    }
    
    let i1 = IpAddKind::V4(String::from("127.0.0.1"));
    let i2 = IpAddKind::V6(String::from("fe80::202:b3ff:fe1e:8329"));
    
    println!("i1 = {:#?}", i1);
    println!("i2 = {:#?}", i2);
}

//  i1 = V4(
//      "127.0.0.1",
//  )
//  i2 = V6(
//      "fe80::202:b3ff:fe1e:8329",
//  )

不同的类型方案

rust 复制代码
fn main(){
    // rust 推荐的定义方式
    #[derive(Debug)]
    enum IpAddKind{
        V4(u8,u8,u8,u8),
        V6(String),
    }
    
    let i1 = IpAddKind::V4(127,0,0,1);
    let i2 = IpAddKind::V6(String::from("fe80::202:b3ff:fe1e:8329"));
    
    println!("i1 = {:#?}", i1);
    println!("i2 = {:#?}", i2);
}

//  i1 = V4(
//      127,
//      0,
//      0,
//      1,
//  )
//  i2 = V6(
//      "fe80::202:b3ff:fe1e:8329",
//  )

第二章 经典用法

第01节 rust的经典用法

案例代码

rust 复制代码
// rust 经典用法
#[derive(Debug)]
enum Message {
    Quit,
    Move{x:i32, y:i32},
    Write(String),
    Change(i32, i32, i32),
}

fn main() {
    let i1 = Message::Quit;
    let i2 = Message::Move{x:10, y:20};
    let i3 = Message::Write(String::from("hello"));
    let i4 = Message::Change(11, 22, 33);

    println!("i1 = {:#?}", i1);
    println!("i2 = {:#?}", i2);
    println!("i3 = {:#?}", i3);
    println!("i4 = {:#?}", i4);
}


//  i1 = Quit
//  i2 = Move {
//      x: 10,
//      y: 20,
//  }
//  i3 = Write(
//      "hello",
//  )
//  i4 = Change(
//      11,
//      22,
//      33,
//  )

第02节 枚举中的方法

案例代码

rust 复制代码
// rust 经典用法
#[derive(Debug)]
enum Message {
    Quit,
    Move{x:i32, y:i32},
    Write(String),
    Change(i32, i32, i32),
}

// 定义枚举类型的方法(准备分支选择)
impl Message{
    fn print_message(&self){
        match self{
            Message::Quit => println!("Quit"),
            Message::Move{x, y} => println!("Move x={}, y={}", x, y),
            Message::Write(text) =>println!("Write {}", text),
            Message::Change(a, b, c) => println!("Change a={}, b={}, c={}", a, b, c),
        }
    }
}


fn main() {
    let i1 = Message::Quit;
    let i2 = Message::Move{x:10, y:20};
    let i3 = Message::Write(String::from("hello"));
    let i4 = Message::Change(11, 22, 33);
    
    i1.print_message();
    i2.print_message();
    i3.print_message();
    i4.print_message();
}

//  Quit
//  Move x=10, y=20
//  Write hello
//  Change a=11, b=22, c=33
相关推荐
F20226974862 分钟前
西门子 PLC 与 C# 通信
开发语言·c#
gugucoding20 分钟前
31. 【C语言】堆栈与队列的实现
c语言·开发语言·数据结构·链表
zhangxingchao23 分钟前
AI大模型核心八:从 Agent Skill、长文档 RAG 到知识库更新与训练策略
前端·人工智能·后端
我叫黑大帅32 分钟前
别再手动写 updated_at了,这坑我踩过
后端·面试·go
zhangxingchao1 小时前
AI大模型核心七:从 Workflow、RAG、记忆治理到幂等性
前端·人工智能·后端
万联WANFLOW1 小时前
多分支企业组网,IP 网段到底该怎么规划
开发语言·php
阿里嘎多学长1 小时前
2026-07-07 GitHub 热点项目精选
开发语言·程序员·github·代码托管
犀利豆2 小时前
AI in Harness(二)
java·人工智能·后端
IT_陈寒2 小时前
Python装饰器竟然偷偷改了函数名?这个坑我爬了三天
前端·人工智能·后端
bkl_92133 小时前
GPT-Image-2 文生图:如何稳定生成完整的人物全身照?
后端·gpt·restful