Aliases para Result

¿Qué tal cuando queremos reutilizar un tipo de Result específico muchas veces? Recordemos que Rust nos permite crear alias. Convenientemente, podemos definir uno para el Result específico en cuestión.

A nivel de módulo, la creación de alias puede resultar especialmente útil. Los errores encontrados en un módulo específico a menudo tienen el mismo tipo de Err, por lo que un solo alias puede definir sucintamente todos los Results asociados. ¡Esto es tan útil que la biblioteca std incluso proporciona uno: io::Result!

Aquí hay un ejemplo rápido para mostrar la sintaxis:

use std::num::ParseIntError;

// Define un alias genérico para un `Result` con el tipo de error `ParseIntError`.
type ResultadoConAlias<T> = Result<T, ParseIntError>;

// Utiliza el alias anterior para referirse a nuestro tipo específico de `Result`.
fn multiplica(primer_num_str: &str, segundo_num_str: &str) -> ResultadoConAlias<i32> {
    primer_num_str.parse::<i32>().and_then(|primer_num| {
        segundo_num_str.parse::<i32>().map(|segundo_num| primer_num * segundo_num)
    })
}

// Aquí, el alias nuevamente nos permite ahorrar algo de espacio.
fn print(result: ResultadoConAlias<i32>) {
    match result {
        Ok(n)  => println!("n es {}", n),
        Err(e) => println!("Error: {}", e),
    }
}

fn main() {
    print(multiplica("10", "2"));
    print(multiplica("t", "2"));
}

Ve también

io::Result