RustでOption型からunwrap_or系で値を取り出しパニックを避ける

Option型はunwrap()で中の値を取り出せますが、中身がNoneの場合は下記のようにパニックになってしまいます。

thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/libcore/option.rs:378:21

unwrap_or

値がNoneの時に確定している値を返す場合は

fn main() {
    let hoge1: Option<&str> = Some("test");
    let hoge2: Option<&str> = None;

    assert_eq!(hoge1.unwrap_or("gueee"), "test");
    assert_eq!(hoge2.unwrap_or("gueee"), "gueee");
}

unwrap_or_else

値がNoneの時に処理を実行したい場合はunwrap_or_elseを使うのが良い

fn main() {
    let default = 2;
    let hoge1: Option<i8> = Some(1);
    let hoge2: Option<i8> = None;

    assert_eq!(hoge1.unwrap_or_else(||{default * 2}), 1);
    assert_eq!(hoge2.unwrap_or_else(||{default * 2}), 4);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA