Ejemplo avanzado de inferencia de tipos en Rust

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, se destaca el motor de inferencia de tipos por su capacidad para deducir el tipo de una variable basado en su uso y asignación de valores, demostrado en un ejemplo avanzado utilizando el lenguaje de programación Rust.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/BasicConceptsGroup -.-> rust/mutable_variables("Mutable Variables") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") 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") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99297{{"Ejemplo avanzado de inferencia de tipos en Rust"}} rust/mutable_variables -.-> lab-99297{{"Ejemplo avanzado de inferencia de tipos en Rust"}} rust/integer_types -.-> lab-99297{{"Ejemplo avanzado de inferencia de tipos en Rust"}} rust/function_syntax -.-> lab-99297{{"Ejemplo avanzado de inferencia de tipos en Rust"}} rust/expressions_statements -.-> lab-99297{{"Ejemplo avanzado de inferencia de tipos en Rust"}} rust/lifetime_specifiers -.-> lab-99297{{"Ejemplo avanzado de inferencia de tipos en Rust"}} rust/method_syntax -.-> lab-99297{{"Ejemplo avanzado de inferencia de tipos en Rust"}} rust/operator_overloading -.-> lab-99297{{"Ejemplo avanzado de inferencia de tipos en Rust"}} end

Inferencia

El motor de inferencia de tipos es bastante inteligente. Hace más que simplemente examinar el tipo de la expresión de valor durante una inicialización. También observa cómo se utiliza la variable posteriormente para inferir su tipo. Aquí hay un ejemplo avanzado de inferencia de tipos:

fn main() {
    // Debido a la anotación, el compilador sabe que `elem` tiene el tipo u8.
    let elem = 5u8;

    // Crea un vector vacío (una matriz creciente).
    let mut vec = Vec::new();
    // En este momento, el compilador no conoce el tipo exacto de `vec`, solo
    // sabe que es un vector de algo (`Vec<_>`).

    // Inserta `elem` en el vector.
    vec.push(elem);
    // Aha! Ahora el compilador sabe que `vec` es un vector de `u8` (`Vec<u8>`)
    // TODO ^ Intenta comentar la línea `vec.push(elem)`

    println!("{:?}", vec);
}

No se necesitó ninguna anotación de tipo de variables, el compilador está contento y el programador también!

Resumen

¡Felicitaciones! Has completado el laboratorio de Inferencia. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.