Varios tipos de error

RustRustBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, veremos un ejemplo en el que una Option necesita interactuar con un Result, o un Result<T, Error1> necesita interactuar con un Result<T, Error2>.

Nota: Si el laboratorio no especifica un nombre de archivo, puede usar cualquier nombre de archivo que desee. Por ejemplo, puede usar main.rs, compilarlo y ejecutarlo con rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") subgraph Lab Skills rust/variable_declarations -.-> lab-99244{{"Varios tipos de error"}} rust/integer_types -.-> lab-99244{{"Varios tipos de error"}} rust/string_type -.-> lab-99244{{"Varios tipos de error"}} rust/function_syntax -.-> lab-99244{{"Varios tipos de error"}} rust/expressions_statements -.-> lab-99244{{"Varios tipos de error"}} rust/lifetime_specifiers -.-> lab-99244{{"Varios tipos de error"}} rust/method_syntax -.-> lab-99244{{"Varios tipos de error"}} end

Varios tipos de error

Los ejemplos anteriores siempre han sido muy convenientes; los Result interactúan con otros Result y las Option interactúan con otras Option.

A veces una Option necesita interactuar con un Result, o un Result<T, Error1> necesita interactuar con un Result<T, Error2>. En esos casos, queremos manejar nuestros diferentes tipos de error de manera que sean composables y fáciles de interactuar.

En el siguiente código, dos instancias de unwrap generan diferentes tipos de error. Vec::first devuelve una Option, mientras que parse::<i32> devuelve un Result<i32, ParseIntError>:

fn double_first(vec: Vec<&str>) -> i32 {
    let first = vec.first().unwrap(); // Generar error 1
    2 * first.parse::<i32>().unwrap() // Generar error 2
}

fn main() {
    let numbers = vec!["42", "93", "18"];
    let empty = vec![];
    let strings = vec!["tofu", "93", "18"];

    println!("El primer número duplicado es {}", double_first(numbers));

    println!("El primer número duplicado es {}", double_first(empty));
    // Error 1: el vector de entrada está vacío

    println!("El primer número duplicado es {}", double_first(strings));
    // Error 2: el elemento no se puede analizar como un número
}

En las siguientes secciones, veremos varias estrategias para manejar este tipo de problemas.

Resumen

¡Felicidades! Has completado el laboratorio de Varios Tipos de Error. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.