Repetición de macros 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, aprenderá a usar macros con los símbolos + y * en la lista de argumentos para indicar repetición. Específicamente, el ejemplo proporcionado demuestra cómo usar $(...),+ para coincidir con una o más expresiones separadas por comas. La macro, find_min!, calcula el valor mínimo entre un número variable de argumentos.

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/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") subgraph Lab Skills rust/function_syntax -.-> lab-99227{{"Repetición de macros en Rust"}} rust/expressions_statements -.-> lab-99227{{"Repetición de macros en Rust"}} rust/method_syntax -.-> lab-99227{{"Repetición de macros en Rust"}} end

Repetición

Las macros pueden usar + en la lista de argumentos para indicar que un argumento puede repetirse al menos una vez, o *, para indicar que el argumento puede repetirse cero o más veces.

En el siguiente ejemplo, rodeando el coincidente con $(...),+ coincidirá con una o más expresiones, separadas por comas. También observe que el punto y coma es opcional en el último caso.

// `find_min!` calculará el mínimo de cualquier número de argumentos.
macro_rules! find_min {
    // Caso base:
    ($x:expr) => ($x);
    // `$x` seguido de al menos un `$y,`
    ($x:expr, $($y:expr),+) => (
        // Llame a `find_min!` en la cola `$y`
        std::cmp::min($x, find_min!($($y),+))
    )
}

fn main() {
    println!("{}", find_min!(1));
    println!("{}", find_min!(1 + 2, 2));
    println!("{}", find_min!(5, 2 * 3, 4));
}

Resumen

¡Felicidades! Has completado el laboratorio de Repetición. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.