Rust 中的枚举

Rust 枚举的语法比较多,容易混乱,在此记录一下。

Rust 使用枚举的场景挺多的,而且使用起来有一些技巧,以后如果领悟到了,我会补充在这里。

Rust 中使用 Rust 风格的枚举主要有三种语法:

rust 复制代码
enum Example {
    Unit,                  // unit-like variant:无数据
    Tuple(u64, bool),      // tuple-like variant:匿名字段
    Struct { value: u64 }, // struct-like variant:命名字段
}

注意,tuple-like 和 struct-like variant 中,内部字段的类型仍然可以是复杂的结构体。

不同类型的 variant 对应不同的 Match 匹配语法

rust 复制代码
enum Example {
    Unit,
    Tuple(u64, bool),
    Struct { value: u64 },
}

fn handle(example: Example) {
    match example {
        Example::Unit => {
            // 无数据
        }

        Example::Tuple(num, flag) => {
            // num: u64
            // flag: bool
        }

        Example::Struct { value } => {
            // value: u64
        }
    }
}

Rust 中的 C 风格枚举。如果一个枚举中全部变量都是 Unit-like 的,他就接近 C 风格了。Rust 枚举内部都有一个 discriminant(判别值) 用于表示当前是哪一个 variant。这个数值默认是编译器实现细节,通常不应依赖。但如果需要,也可以显式指定,如

rust 复制代码
#[repr(u8)]
enum Color {
    Red = 1,
    Green = 2,
    Blue = 3,
}

这里明确要求了每一个变量的判别值和判别值的存储类型。

#repr(u8) 在这里似乎用于指定判别值的存储类型,#repr() 也会在其他场景被使用,常用于做跨语言兼容,有机会也可以总结下他的用法。

相关推荐
花褪残红青杏小14 小时前
Rust图像处理第9节-Sobel 边缘检测:第一个真正用卷积的算法
rust·webassembly·图形学
doiito17 小时前
【Agent Harness】Gliding Horse L2 作战地图深度优化:给多 Agent 上下文装上“精准导航”
ai·rust·架构设计·系统设计·ai agent
花褪残红青杏小1 天前
Rust图像处理第8节-暗角 & 复古胶片特效:四周衰减中心高亮
rust·webassembly·图形学
独孤留白2 天前
从C到Rust:Rust 的 Trait 不是Interface,那是什么?
rust
花褪残红青杏小2 天前
Rust图像处理第7节-马赛克像素化:分块取平均色实现打码风格
rust·webassembly·图形学
doiito3 天前
【Agent Harness】Gliding Horse 设计细节 -- 不跟风开发自己的AI Agent
架构·rust·agent
doiito3 天前
【Agent Harness】Gliding Horse 核心设计理念,不跟风开发自己的AI Agent
ai·rust·架构设计·系统设计·ai agent
花褪残红青杏小3 天前
Rust图像处理第6节- 均值模糊 & 中值模糊:3×3 邻域的两种经典玩法
rust·webassembly·图形学
子兮曰3 天前
前端工具链的「Rust 化」:一场没有赢家的军备竞赛?
前端·后端·rust