Progrust Library.

// dictionary

列挙型.

列挙型(enum)は、ある型が取りうる値の種類を「バリアント」として列挙する型です。構造体が複数の値を同時に1つにまとめるのに対し、列挙型は複数の選択肢のうちどれか1つだけを表します。バリアントにはデータを持たせないもの、タプル構造体のように位置でデータを持たせるもの、構造体のように名前付きフィールドでデータを持たせるものの3種類があり1、1つの列挙型の中で混在させられます。

enum Shape {
    Point,                                 // データなし
    Circle(f64),                           // タプル的(半径)
    Rectangle { width: f64, height: f64 }, // 構造体的(幅・高さ)
}

impl Shape {
    fn area(&self) -> f64 {
        match self {
            Shape::Point => 0.0,
            Shape::Circle(radius) => std::f64::consts::PI * radius * radius,
            Shape::Rectangle { width, height } => width * height,
        }
    }
}

fn main() {
    let shapes = vec![
        Shape::Point,
        Shape::Circle(2.0),
        Shape::Rectangle { width: 4.0, height: 5.0 },
    ];
    for shape in &shapes {
        println!("面積: {:.2}", shape.area());
    }
}
Playgroundで開く

メソッドの定義

上記のように、構造体と同じく列挙型にもimplブロックメソッドを定義できます。バリアントに応じて処理を分岐させるにはmatch式を使うのが基本です。

補足

標準ライブラリのOption・Result

標準ライブラリが提供する列挙型の中でも特に重要なのが、値の有無を表すOption型Option<T>)と、成功・失敗を表すResult型Result<T, E>)です。

Footnotes

  1. The Rust Reference: Enumerations — バリアントには値を持たない形・タプル型の値を持つ形・構造体型の値を持つ形の3種類があると定義しています。

この辞書が使われているページ

backlinks 11

  1. 辞書if let式
  2. 辞書match式
  3. 辞書Option型
  4. 辞書pub
  5. 辞書Result型
  6. 辞書unwrap
  7. 辞書use宣言
  8. 辞書モジュール
  9. 動かして学ぶRustプログラミング問題集 › 第11章 列挙型とmatch式
  10. 動かして学ぶRustプログラミング問題集 › 第12章 OptionとResult
  11. 動かして学ぶRustプログラミング問題集 › 第13章 モジュールと公開範囲