wiki/dev/lang/rust/Option.md
2024-01-29 02:46:26 +03:00

830 B

Option.

Definition.

enum Option<T> {
    None,
    Some(T),
}

Usage.

fn maybe_icecream(hour: u16) -> Option<u16> {
    if hour > 10 { Some(5) }
    else { None }
}

Subtypes.

If-let.

let letter: Option<i32> = Some(12);
if let Some(i) = letter {
    // It was Some().
} else {
    // It was None.
}

While-let.

let letter: Option<i32> = Some(0);
while let Some(i) = letter {
    if i > 9 {
        foo();
        letter = None;
    } else {
        bar()
        letter = Some(i + 1);
    }
}

Match.

Use ref keyword to borrow value that doesn't implement Copy trait.

let y: Option<Point> = Some(Point { x: 100, y: 200 });
match y {
    Some(ref p) => println!("Co-ordinates are {},{} ", p.x, p.y),
    _           => panic!("no match!"),
}