◾️はじめに
Rust を勉強していて、例えば、Option型では、 以下の関連記事の通り、enum で定義されていた。 どうも、Rustは、CやJavaなどの他のプログラムと比べても enum が異なりそうなので、調べてみた
Rust ~ Option型 ~
https://dk521123.hatenablog.com/entry/2025/12/01/223443
// enumなんだ、、、ここは、Scalaと違う、、、 enum Option<T> { Some(T), None, }
目次
【1】enum 1)基本的な定義方法 2)Enumの値の設定 【2】Rustのenumの特徴 1)enum値ごとに異なる値が設定できる 【3】その他Tips 1)match式
【1】enum
* 列挙型 => Rust 特有の特徴については、後述「【2】Rustのenumの特徴」を参照
https://doc.rust-jp.rs/book-ja/ch06-01-defining-an-enum.html
1)基本的な定義方法
enum IpAddrKind { V4, V6, }
2)Enumの値の設定
// [列挙型]::[Enum値] let four = IpAddrKind::V4; let six = IpAddrKind::V6;
【2】Rustのenumの特徴
* Rustのenumは、以下の例のように値が設定できる。 ここは、Javaなど他のプログラムでも設定できるが 以降の章では、Rust特有なenumの使い方を扱う
例
enum IpAddr { V4(String), V6(String), } let home = IpAddr::V4(String::from("127.0.0.1")); let loopback = IpAddr::V6(String::from("::1"));
1)enum値ごとに異なる値が設定できる
* これは、Rust特有な気がする、、、
例1
// enum enum IpAddr { V4(u8, u8, u8, u8), V6(String), } let home = IpAddr::V4(127, 0, 0, 1); let loopback = IpAddr::V6(String::from("::1"));
例2
enum Message { Quit, Move { x: i32, y: i32 }, Write(String), ChangeColor(i32, i32, i32), }
【3】その他Tips
1)match式
* match式 とも相性がいい、、、
サンプル
enum IpAddr { V4(u8, u8, u8, u8), V6(String), } fn main() { let home = IpAddr::V4(127, 0, 0, 1); match home { // IPv4: 127.0.0.1 IpAddr::V4(a, b, c, d) => println!("IPv4: {}.{}.{}.{}", a, b, c, d), IpAddr::V6(ref addr) => println!("IPv6: {}", addr), } let loopback = IpAddr::V6(String::from("::1")); match loopback { IpAddr::V4(a, b, c, d) => println!("IPv4: {}.{}.{}.{}", a, b, c, d), // IPv6: ::1 IpAddr::V6(ref addr) => println!("IPv6: {}", addr), } }
関連記事
Rust ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/22/234808
Rust ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/11/26/224648
Rust ~ 保有権 ~
https://dk521123.hatenablog.com/entry/2023/05/04/213726
Rust ~ mod ~
https://dk521123.hatenablog.com/entry/2025/11/29/221911
Rust ~ struct/impl/trait ~
https://dk521123.hatenablog.com/entry/2025/11/30/222255
Rust ~ Option型 ~
https://dk521123.hatenablog.com/entry/2025/12/01/223443
Rust ~ Error handling(Result型 / ?演算子) ~
https://dk521123.hatenablog.com/entry/2025/12/02/000346
Rust ~ Axum / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/09/02/224707
Rust ~ Axum / REST ~
https://dk521123.hatenablog.com/entry/2025/11/27/145159