枚举
enum 的解构方式类似:
// 使用 `allow` 来抑制警告,因为只使用了一个变体。
#[allow(dead_code)]
enum Color {
// 这 3 个仅通过名称指定。
Red,
Blue,
Green,
// 这些同样将 `u32` 元组与不同的名称(颜色模型)关联。
RGB(u32, u32, u32),
HSV(u32, u32, u32),
HSL(u32, u32, u32),
CMY(u32, u32, u32),
CMYK(u32, u32, u32, u32),
}
fn main() {
let color = Color::RGB(122, 17, 40);
// TODO ^ 尝试为 `color` 使用不同的变体
println!("这是什么颜色?");
// 可以使用 `match` 来解构 `enum`。
match color {
Color::Red => println!("颜色是红色!"),
Color::Blue => println!("颜色是蓝色!"),
Color::Green => println!("颜色是绿色!"),
Color::RGB(r, g, b) =>
println!("红:{},绿:{},蓝:{}!", r, g, b),
Color::HSV(h, s, v) =>
println!("色相:{},饱和度:{},明度:{}!", h, s, v),
Color::HSL(h, s, l) =>
println!("色相:{},饱和度:{},亮度:{}!", h, s, l),
Color::CMY(c, m, y) =>
println!("青:{},品红:{},黄:{}!", c, m, y),
Color::CMYK(c, m, y, k) =>
println!("青:{},品红:{},黄:{},黑(K):{}!",
c, m, y, k),
// 不需要其他分支,因为所有变体都已检查
}
}