✨
Rust でデータを持つ列挙型(enum)のプロパティにアクセスする
はじめに
Rust のデータを持つ列挙型(enum)へのアクセスってどうやるんだ?となったので、学んだことをアウトプットします。
若干のメモ書きとなっていますが、迷っている方の救いとなれば幸いです。
▼参考
列挙型の中に構造体
以下のような列挙型+構造体の組み合わせのプロパティにアクセスしたいという前提がありました。
enum Members {
Mike(Mike),
Bob(Bob),
John(John),
}
struct Mike {
name: String,
age: u8,
}
struct Bob {
name: String,
age: u8,
}
struct John {
name: String,
age: u8,
}
このように Members
の中には複数の構造体が存在している中、それぞれの name
プロパティにアクセスしたいとき、パッとコードが浮かびませんでした。
結論
Members
列挙型に以下のようなget_name
を実装することで name
を取得することができます。
enum Members {
Mike(Mike),
Bob(Bob),
John(John),
}
impl Members {
fn get_name(&self) -> String {
match self {
Members::Mike(m) => m.name.clone(),
Members::Bob(b) => b.name.clone(),
Members::John(j) => j.name.clone(),
}
}
}
struct Mike {
name: String,
age: u8,
}
struct Bob {
name: String,
age: u8,
}
struct John {
name: String,
age: u8,
}
fn main() {
let mike = Members::Mike(Mike {
name: "Mike".to_string(),
age: 20,
});
println!("Name: {}", mike.get_name());
}
Discussion