【百例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
相关推荐
小新讲网安33 分钟前
WiFi安全攻防实战:WPA3新协议与传统破解技术全解析
开发语言·网络·安全·php·漏洞·nmap·漏洞检测
再吃一根胡萝卜6 小时前
微服务治理的“四大护法”:从 Django 视角理解 Spring Cloud 核心组件
后端
再吃一根胡萝卜6 小时前
面试终极挑战:如何用 Django 经验,回答 Java 微服务实战问题?
后端
必须会一定会6 小时前
Agent Plugins 1.0实战:plugin.json、skills、mcp.json目录结构与迁移
开发语言·人工智能·ai编程
To_OC7 小时前
装完 ESLint 它一声不吭?我还以为代码写得多好
后端·node.js·eslint
St_rive7 小时前
Page Object设计模式
java·开发语言·设计模式
wp123_17 小时前
硬件元器件笔记|IPX8 防水 Type‑C 母座安费诺 124018802112A 与 TONEVEE TY48086‑24A 分析
c语言·开发语言·笔记
wuyk5557 小时前
4.树:一对多的层次数据结构
开发语言·数据结构·stm32·单片机
凤山老林8 小时前
精细化流量治理:Spring Boot 动态特性开关与灰度发布体系
java·spring boot·后端
luj_17688 小时前
桥牌思维启示:系统设计的模块化架构
c语言·开发语言·c++·经验分享·算法