枚举

和前面相似,解构 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. }
  15. fn main() {
  16. let color = Color::RGB(122, 17, 40);
  17. // 试一试 ^ 将不同的值赋给 `color`
  18. println!("What color is it?");
  19. // 可以使用 `match` 来解构 `enum`。
  20. match color {
  21. Color::Red => println!("The color is Red!"),
  22. Color::Blue => println!("The color is Blue!"),
  23. Color::Green => println!("The color is Green!"),
  24. Color::RGB(r, g, b) =>
  25. println!("Red: {}, green: {}, and blue: {}!", r, g, b),
  26. Color::HSV(h, s, v) =>
  27. println!("Hue: {}, saturation: {}, value: {}!", h, s, v),
  28. Color::HSL(h, s, l) =>
  29. println!("Hue: {}, saturation: {}, lightness: {}!", h, s, l),
  30. Color::CMY(c, m, y) =>
  31. println!("Cyan: {}, magenta: {}, yellow: {}!", c, m, y),
  32. Color::CMYK(c, m, y, k) =>
  33. println!("Cyan: {}, magenta: {}, yellow: {}, key (black): {}!",
  34. c, m, y, k),
  35. // 不需要其它分支,因为所有的情形都已覆盖
  36. }
  37. }

参见:

#[allow(...)], color modelsenum