Como parámetros de salida

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, aprendemos que las closures pueden usarse como parámetros de entrada y también pueden devolverse como parámetros de salida al utilizar impl Trait y especificar los traits válidos (Fn, FnMut, FnOnce). La palabra clave move se utiliza para indicar que todas las capturas se realizan por valor, evitando referencias inválidas.

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 con rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/BasicConceptsGroup -.-> rust/mutable_variables("Mutable Variables") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/AdvancedTopicsGroup -.-> rust/traits("Traits") subgraph Lab Skills rust/variable_declarations -.-> lab-99327{{"Como parámetros de salida"}} rust/mutable_variables -.-> lab-99327{{"Como parámetros de salida"}} rust/string_type -.-> lab-99327{{"Como parámetros de salida"}} rust/function_syntax -.-> lab-99327{{"Como parámetros de salida"}} rust/expressions_statements -.-> lab-99327{{"Como parámetros de salida"}} rust/traits -.-> lab-99327{{"Como parámetros de salida"}} end

Como parámetros de salida

Es posible utilizar closures como parámetros de entrada, por lo que también debería ser posible devolver closures como parámetros de salida. Sin embargo, los tipos de closures anónimos son, por definición, desconocidos, por lo que tenemos que utilizar impl Trait para devolverlos.

Los traits válidos para devolver una closure son:

  • Fn
  • FnMut
  • FnOnce

Además de esto, se debe utilizar la palabra clave move, lo que indica que todas las capturas se realizan por valor. Esto es necesario porque cualquier captura por referencia se perdería tan pronto como la función saliera, dejando referencias inválidas en la closure.

fn create_fn() -> impl Fn() {
    let text = "Fn".to_owned();

    move || println!("This is a: {}", text)
}

fn create_fnmut() -> impl FnMut() {
    let text = "FnMut".to_owned();

    move || println!("This is a: {}", text)
}

fn create_fnonce() -> impl FnOnce() {
    let text = "FnOnce".to_owned();

    move || println!("This is a: {}", text)
}

fn main() {
    let fn_plain = create_fn();
    let mut fn_mut = create_fnmut();
    let fn_once = create_fnonce();

    fn_plain();
    fn_mut();
    fn_once();
}

Resumen

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