El operador ? en Rust
? devuelve el error temprano, y el camino feliz se lee como una línea recta.
fn sum_of(a: &str, b: &str, c: &str) -> Result<i32, std::num::ParseIntError> {
let total = a.parse::<i32>()? + b.parse::<i32>()? + c.parse::<i32>()?;
Ok(total)
}
fn middle(line: &str) -> Option<char> {
let word = line.split(' ').nth(1)?;
let mid = word.len() / 2;
word.chars().nth(mid)
}
fn main() {
println!("{:?}", sum_of("1", "2", "3"));
println!("{}", sum_of("1", "two", "3").is_err());
println!("{:?}", middle("the quick fox"));
}
Cómo funciona
- Funciona en cualquier función que devuelva
ResultuOption. - Ante
Errretorna de inmediato, convirtiendo el tipo de error. - Encadenar varias llamadas no necesita ningún match.
Palabras clave y builtins usados aquí
OkOptionResultcharfni32letstr
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 437
- Tokens
- 194
- Ritmo de tres estrellas
- 100 tpm
Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 116 segundos.
Paso 2 de 4 en Result y el operador ?; paso 5 de 15 en Manejo de errores.