枚举
和前面相似,解构 enum 方式如下:
1. // 需要 `allow` 来消除警告,因为只使用了一个变量。
2. #[allow(dead_code)]
3. enum Color {
4. // 这三者仅由它们的名字来表示。
5. Red,
6. Blue,
7. Green,
8. // 这些元组含有类似的 `u32` 元素,分别对应不同的名字:颜色模型(color models)。
9. RGB(u32, u32, u32),
10. HSV(u32, u32, u32),
11. HSL(u32, u32, u32),
12. CMY(u32, u32, u32),
13. CMYK(u32, u32, u32, u32),
14. }
16. fn main() {
17. let color = Color::RGB(122, 17, 40);
18. // 试一试 ^ 将不同的值赋给 `color`
20. println!("What color is it?");
21. // 可以使用 `match` 来解构 `enum`。
22. match color {
23. Color::Red => println!("The color is Red!"),
24. Color::Blue => println!("The color is Blue!"),
25. Color::Green => println!("The color is Green!"),
26. Color::RGB(r, g, b) =>
27. println!("Red: {}, green: {}, and blue: {}!", r, g, b),
28. Color::HSV(h, s, v) =>
29. println!("Hue: {}, saturation: {}, value: {}!", h, s, v),
30. Color::HSL(h, s, l) =>
31. println!("Hue: {}, saturation: {}, lightness: {}!", h, s, l),
32. Color::CMY(c, m, y) =>
33. println!("Cyan: {}, magenta: {}, yellow: {}!", c, m, y),
34. Color::CMYK(c, m, y, k) =>
35. println!("Cyan: {}, magenta: {}, yellow: {}, key (black): {}!",
36. c, m, y, k),
37. // 不需要其它分支,因为所有的情形都已覆盖
38. }
39. }
