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

列挙型

enum も同様に分配束縛できます:

// 1つのバリアントしか使われないため、警告を抑制するには
// `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!("これは何色ですか?");
    // `enum` は `match` を使って分配束縛できます。
    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!("シアン: {}、マゼンタ: {}、イエロー: {}、キー(黒): {}!",
                c, m, y, k),
        // すべてのバリアントが調べられているため、別のアームは不要です
    }
}

関連項目:

#[allow(...)]カラーモデル、および enum