列挙型 - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# 列挙型

列挙型も似たやり方でデストラクトすることができます。

    // `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!("What color is it?");
        // `enum`は`match`を利用してデストラクトすることができます。
        match color {
            Color::Red   => println!("The color is Red!"),
            Color::Blue  => println!("The color is Blue!"),
            Color::Green => println!("The color is Green!"),
            Color::RGB(r, g, b) =>
                println!("Red: {}, green: {}, and blue: {}!", r, g, b),
            Color::HSV(h, s, v) =>
                println!("Hue: {}, saturation: {}, value: {}!", h, s, v),
            Color::HSL(h, s, l) =>
                println!("Hue: {}, saturation: {}, lightness: {}!", h, s, l),
            Color::CMY(c, m, y) =>
                println!("Cyan: {}, magenta: {}, yellow: {}!", c, m, y),
            Color::CMYK(c, m, y, k) =>
                println!("Cyan: {}, magenta: {}, yellow: {}, key (black): {}!",
                    c, m, y, k),
            // 全ての値を列挙したのでその他の場合の処理は必要ありません。
        }
    }

### 参照

`#[allow(...)]`, カラーモデル, 列挙型