Introducción
En este laboratorio, se demuestra el uso de let-else en Rust, donde un patrón refutable puede coincidir y enlazar variables en el ámbito circundante, o en su defecto diverger cuando el patrón no coincide mediante el uso de declaraciones como break, return o panic!. Esta construcción permite un código conciso y legible al tratar con casos de coincidencia de patrones y manejo de errores, eliminando la necesidad de repetir bloques de código o usar declaraciones let externas.
Nota: Si el laboratorio no especifica un nombre de archivo, puede usar cualquier nombre de archivo que desee. Por ejemplo, puede usar
main.rs, compilar y ejecutarlo conrustc main.rs &&./main.
let-else
Con let-else, un patrón refutable puede coincidir y enlazar variables en el ámbito circundante como un let normal, o en su defecto diverger (por ejemplo, break, return, panic!) cuando el patrón no coincide.
use std::str::FromStr;
fn get_count_item(s: &str) -> (u64, &str) {
let mut it = s.split(' ');
let (Some(count_str), Some(item)) = (it.next(), it.next()) else {
panic!("Can't segment count item pair: '{s}'");
};
let Ok(count) = u64::from_str(count_str) else {
panic!("Can't parse integer: '{count_str}'");
};
(count, item)
}
fn main() {
assert_eq!(get_count_item("3 chairs"), (3, "chairs"));
}
El ámbito de enlaces de nombres es lo principal que los distingue de las expresiones match o if let-else. Anteriormente, se podía aproximar estos patrones con una desagradable cantidad de repetición y un let externo:
use std::str::FromStr;
fn get_count_item(s: &str) -> (u64, &str) {
let mut it = s.split(' ');
let (count_str, item) = match (it.next(), it.next()) {
(Some(count_str), Some(item)) => (count_str, item),
_ => panic!("Can't segment count item pair: '{s}'"),
};
let count = if let Ok(count) = u64::from_str(count_str) {
count
} else {
panic!("Can't parse integer: '{count_str}'");
};
(count, item)
}
assert_eq!(get_count_item("3 chairs"), (3, "chairs"));
Resumen
¡Felicitaciones! Has completado el laboratorio Let-Else. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.