【百例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
相关推荐
ShyanZh16 分钟前
【Python3基础】13-Python 常用设计模式
开发语言·python·设计模式
再吃一根胡萝卜20 分钟前
给 RAG 问答加上「多轮指代消解」:让"他 / 这个"不再翻车
后端
m0_3807438722 分钟前
Qt侧边栏布局的实现示例
开发语言·c++
zh_xuan30 分钟前
c++ 23 std::out_ptr用法
开发语言·c++23·out_ptr
陆卿之1 小时前
Java对接DeepSeek
java·开发语言·人工智能
庄园特聘拆椅狂魔1 小时前
Java 后端转全栈的第一课:从前端项目搭建到技术选
java·开发语言·前端
Wx-bishekaifayuan1 小时前
springboot生活易购超市管理系统54086-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
lizhongxuan1 小时前
VirtIO:虚拟机的磁盘、网络与内存是怎样工作的
后端
weixin_307779131 小时前
C++代码实现MATLAB中的pade函数功能
开发语言·c++·算法·matlab
ProcessOn官方账号2 小时前
java IO操作 你快速认识IO的相关基本知识
java·开发语言