Avatar ·

如何在 Rust 中将枚举值与整数(i32, u64)进行映射?

大家好!我刚开始学习 Rust,遇到了一个看似简单但找不到优雅解决方案的问题。 我有一个枚举 `Color`,描述颜色: ```rust enum Color { Red, Green, Blue, } ``` 我想为每个变体分配一个整数值,例如 `Red` 对应 0,`Green` 对应 1,`Blue` 对应 2。然后我需要: 1. 从枚举变体中获取数字(例如,从 `Color::Green` 获取 `1`)。 2. 反向转换:根据数字(例如 `2`)获取变体 `Color::Blue`。 在 C++ 或 C# 中,我只需写 `(int)color` 或 `(Color)2`。在 Python 中,我会用字典。但在 Rust 中,类型检查更严格。 我尝试使用 `as`: ```rust let c = Color::Red; let n = c as i32; // 错误:non-primitive cast ``` 编译器报错:`non-primitive cast`。我读过关于 `#[repr(i32)]` 的内容,但不确定是否正确。以及如何进行反向转换?请指教。