Option<T>
は値があるかないかを表現する為の型です。ある場合はSome<T>
、ない場合はNone
になります。
let option_thirty_three = Some(33);
let none = None as Option;
Option
な値は基本中身を取り出してから使います。そのⅠつが::unwrap
です。これは値がSome<T>
の時T
を取り出してくれます。
assert_eq!(Some(33).unwrap(), 33);
ただし、これは値が入ってるので大丈夫ですがNone
に対して呼んでしまうと Panic を起こしてしまいます。
assert_eq!((None as Option).unwrap(), 33);
// thread 'main' panicked at 'called `Option::unwrap()`
// on a `None` value'
None
の時はデフォルト値を返したいなどの場合は、::unwrap_or
を使います。
assert_eq!((None as Option).unwrap_or(66), 66);
もしくは Panic のままエラー文章だけ分かりやすくしたい場合は、::expect
を使います。
assert_eq!((None as Option).expect("a value isn't equal 33"), 33);
// thread 'main' panicked at 'a value isn't equal 33'
値の加工
Option
のまま値を更新できるのが::map
です。
assert_eq!(
Some(33).map(|mut thirty_three| {
thirty_three += 1;
thirty_three
}),
Some(34)
);