RustのOption型をmatchで上手に取り出す

matchOption型を渡すとunwrapしてくれるのでコード量が若干減ります

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

    assert_eq!(1 as i8, match hoge1 { Some(x) => x, _ => 8 as i8 });
    assert_eq!(8 as i8, match hoge2 { Some(x) => x, _ => 8 as i8 });
}

matchを使わないで処理を書く場合ifを使うことになりますが、そんなにコード量が増えるわけではないですが、前回の記事に書いたようにunwrapはパニックを起こすものなので、matchを使い、unwrapがコード上に現れないようにするほうが良さそうです。

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

    let res1: i8 = if hoge1.is_some() { hoge1.unwrap() } else { 8 };
    let res2: i8 = if hoge2.is_some() { hoge1.unwrap() } else { 8 };

    assert_eq!(1, res1);
    assert_eq!(8, res2);
}

他にmap系を使う方法もあります。これらはResultの時と似たようなもので、今度説明しますね。

コメントを残す

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

CAPTCHA