• 枚举
    • 参见:

    枚举

    和前面相似,解构 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 models 和 enum