Introducción a los Designadores de los Macros de 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 nos introduce el concepto de designadores en los macros de Rust. Los designadores se utilizan para prefijar los argumentos de un macro y están anotados por tipo. Algunos ejemplos de designadores incluyen ident para nombres de variables/funciones, expr para expresiones, block para bloques de código y pat para patrones. Estos designadores se utilizan dentro de las reglas de macro para generar código basado en los argumentos proporcionados.

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/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/type_casting("Type Conversion and Casting") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99225{{"Introducción a los Designadores de los Macros de Rust"}} rust/type_casting -.-> lab-99225{{"Introducción a los Designadores de los Macros de Rust"}} rust/function_syntax -.-> lab-99225{{"Introducción a los Designadores de los Macros de Rust"}} rust/expressions_statements -.-> lab-99225{{"Introducción a los Designadores de los Macros de Rust"}} rust/operator_overloading -.-> lab-99225{{"Introducción a los Designadores de los Macros de Rust"}} end

Designadores

Los argumentos de un macro están prefijados por un signo de dólar $ y se les anota el tipo con un designador:

macro_rules! create_function {
    // Este macro toma un argumento de designador `ident` y
    // crea una función llamada `$func_name`.
    // El designador `ident` se utiliza para nombres de variables/funciones.
    ($func_name:ident) => {
        fn $func_name() {
            // El macro `stringify!` convierte un `ident` en una cadena.
            println!("You called {:?}()",
                     stringify!($func_name));
        }
    };
}

// Crea funciones llamadas `foo` y `bar` con el macro anterior.
create_function!(foo);
create_function!(bar);

macro_rules! print_result {
    // Este macro toma una expresión de tipo `expr` y la imprime
    // como una cadena junto con su resultado.
    // El designador `expr` se utiliza para expresiones.
    ($expression:expr) => {
        // `stringify!` convertirá la expresión *tal cual* en una cadena.
        println!("{:?} = {:?}",
                 stringify!($expression),
                 $expression);
    };
}

fn main() {
    foo();
    bar();

    print_result!(1u32 + 1);

    // Recuerde que los bloques también son expresiones!
    print_result!({
        let x = 1u32;

        x * x + 2 * x - 1
    });
}

Estos son algunos de los designadores disponibles:

  • block
  • expr se utiliza para expresiones
  • ident se utiliza para nombres de variables/funciones
  • item
  • literal se utiliza para constantes literales
  • pat (patrón)
  • path
  • stmt (sentencia)
  • tt (árbol de tokens)
  • ty (tipo)
  • vis (calificador de visibilidad)

Para una lista completa, consulte la [Rust Reference].

Resumen

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