Option
Ya hemos visto algunos usos de Option<T>. Almacena un valor de tipo T o nada. Por ejemplo, String::find devuelve un Option<usize>.
fn main() { let name = "Löwe 老虎 Léopard Gepardi"; let mut position: Option<usize> = name.find('é'); println!("buscar {position:?} devuelto"); assert_eq!(position.unwrap(), 14); position = name.find('Z'); println!("buscar {position:?} devuelto"); assert_eq!(position.expect("No se ha encontrado el carácter"), 0); }
This slide should take about 10 minutes.
Optionse usa en muchos contextos, no solo en la biblioteca estándar.unwrapdevolverá el valor en un elementoOptiono un error pánico.expectfunciona de forma similar, pero muestra un mensaje de error.- Puedes obtener un pánico en None, pero no puedes olvidarte “de forma accidental” de seleccionar None.
- Es habitual usar
unwrap/expectpor todas partes, pero el código de producción suele gestionarNonede una forma más adecuada.
- La “optimización de nicho” significa que
Option<T>a menudo tiene el mismo tamaño en memoria queT.