Option
We have already seen some use of Option<T>. It stores either a value of type
T or nothing. For example,
String::find
returns an Option<usize>.
fn main() { let name = "Löwe èè LĂ©opard Gepardi"; let mut position: Option<usize> = name.find('Ă©'); println!("find returned {position:?}"); assert_eq!(position.unwrap(), 14); position = name.find('Z'); println!("find returned {position:?}"); assert_eq!(position.expect("Character not found"), 0); }
This slide should take about 10 minutes.
Optionis widely used, not just in the standard library.unwrapwill return the value in anOption, or panic.expectis similar but takes an error message.- You can panic on None, but you canât âaccidentallyâ forget to check for None.
- Itâs common to
unwrap/expectall over the place when hacking something together, but production code typically handlesNonein a nicer fashion.
- The niche optimization means that
Option<T>often has the same size in memory asT.