RustのOption型をmapとand_thenで上手に取り出す

以前matchについて書きました。今回はmapand_thenというコンビネータを利用した値の取り出しについて書いてみます。

map

mapは値を加工できるが、型自体を変更できない。SomeはSome、NoneはNoneになる。

fn main() {

    let case1: Option<i8> = Some(1);
    let case2: Option<i8> = None;

    assert_eq!(case1.map(|n| n * 2 ), Some(2));
    assert_eq!(case2.map(|n| n * 2 ), None);
}

and_then

and_then は返す型を変更できる。

fn main() {

    let case1: Option<i8> = Some(1);
    let case2: Option<i8> = Some(2);

    assert_eq!(case1.and_then(|n| if n == 2 { Some(n) } else { None }), None);
    assert_eq!(case2.and_then(|n| if n == 2 { Some(n) } else { None }), Some(2));
}

コメントを残す

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

CAPTCHA