枚举

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),
        // 不需要其他分支,因为所有变体都已检查
    }
}

另请参阅:

#[allow(...)]颜色模型enum