// 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
-
The Rust Reference: Enumerations — バリアントには値を持たない形・タプル型の値を持つ形・構造体型の値を持つ形の3種類があると定義しています。 ↩
この辞書が使われているページ
backlinks 11