Rust には値が存在しない可能性がある場合に使用する、Option
Option型の定義は次の通り。
enum Option<T> { None, Some(T) }
使用例
let values = vec!["hoge", "fuga", "moge", "gegege"]; println!("{:?}", values.get(0)); println!("{:?}", values.get(2)); println!("{:?}", values.get(100));
出力は次の通り。
Some("hoge") Some("moge") None
1〜2回目は配列内のインデックスにアクセスしているため、
結果は Some("hoge")
と Some("moge")
となっている。
100番目の要素を取得しようとすると、パニックにならず None が返された。
パターンマッチ
Some()
の中身にアクセスするには、パターンマッチングが利用できる。
let values = vec!["hoge", "fuga", "moge", "gegege"]; for &idx in [0, 1, 3, 5, 100].iter() { match values.get(idx) { Some(text) => println!("{}", text), None => println!("値はありません"), } }
この例を実行すると、出力は次のようになる。
hoge fuga gegege 値はありません 値はありません
if let式
if let式を使って、こういった書き方もできる。
let values = vec!["hoge", "fuga", "moge", "gegege"]; if let Some(value) = values.get(100) { println!("{}", value); } else { println!("値はありません:"); } if let Some(value) = values.get(1) { println!("{}", value); }