列挙型
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