enum:“枚举”
我也不知道 enum 具体应该怎么通俗易懂地解释了。
怎么说呢?可以说是一种数据类型,里边的内容可以在自己定义的预设值中选一个。
比如:
我定义了一个 enum ProgrammingLanguage { C, CPP, C_Sharp, Rust, Java, Python, }
,
之后就可以定义一个 ProgrammingLanguage 类型的变量:let a = ProgrammingLanguage::Rust;
ProgrammingLanguage 类型的变量的值只能是 C
, CPP
, C_Sharp
, Rust
, Java
, Python
之一。
当然,这只是 enum 最简单的用法。
定义
// 定义写在主函数外面
enum ProgrammingLanguage {
C, // 不用写成字符串
CPP,
C_Sharp,
Rust,
Java,
Python, // 最后一行也写上逗号
}
// enum 名称 { 值 1, 值 2, 值 n, }
创建 enum 类型的变量
这里沿用上面定义的 enum
fn main() {
let a = ProgrammingLanguage::Rust;
// 这里要用 enum名称::值 这种写法
// 这种写法 (::) 实际上是 Rust 中调用 命名空间 中的内容的写法,前面的 io::stdin() 和 String::from() 中的 :: 也是这个意思
}
比较
fn main() {
let a = ProgrammingLanguage::Rust;
if a == ProgrammingLanguage::Rust { println!("Hello World!"); }
// 判断时也要使用 enum名称::值 这种写法
}
给 enum 中的”类型“带上一个值
enum ProgrammingLanguage {
C(String), // 名称(值类型)
CPP(String),
C_Sharp(f64),
Rust(f64),
Java(f64),
Python(f64),
}
fn main() {
let a = ProgrammingLanguage::CPP("c++17".to_string()); // 定义变量时写法和前面一样,enum名称::值(值)
// 当然,比较也一样:
if a == ProgrammingLanguage::CPP("c++17".to_string()) { println!("Hello World!"); }
}
有点熟悉?
上一次我们说的 Option <T>
其实就是一种 enum!
Option 的最简单的实现大概就是这样(当然,这个不能 unwrap):
enum Option <T> {
None,
Some(T),
}
// 这里 T 表示一种数据类型