Skip to content

枚举

enum 表示一组互斥变体,变体可以无数据、像元组一样带数据,或像结构体一样命名字段。

rust
enum Status {
    Idle,
    Running { job_id: u64 },
    Failed(String),
}

带数据的枚举适合状态机、协议消息和错误形状。用 matchif let 解构变体;match 必须穷尽。

rust
fn label(status: Status) -> String {
    match status {
        Status::Idle => "idle".into(),
        Status::Running { job_id } => format!("job {job_id}"),
        Status::Failed(msg) => msg,
    }
}

Option

Option<T> 是标准库枚举:Some(T)None,用来表示缺失,而不是哨兵值或空指针。

rust
fn find(id: u64) -> Option<User> {
    users.into_iter().find(|u| u.id == id)
}

unwrap() / expect()None 时 panic,只适合不变量被破坏的路径。库代码把 None 向上传,或转成 Result

Result<T, E> 同样是枚举,表示可恢复失败。

参考

基于 MIT 许可发布