Interfaces Variádicas en el Programa 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, exploramos interfaces variádicas, que son interfaces que pueden tomar un número arbitrario de argumentos. Como ejemplo, modificamos la macro calculate! de la sección anterior para que sea variádica, lo que permite evaluar múltiples expresiones a la vez.

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/BasicConceptsGroup(["Basic Concepts"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") subgraph Lab Skills rust/variable_declarations -.-> lab-99230{{"Interfaces Variádicas en el Programa de Rust"}} rust/function_syntax -.-> lab-99230{{"Interfaces Variádicas en el Programa de Rust"}} rust/expressions_statements -.-> lab-99230{{"Interfaces Variádicas en el Programa de Rust"}} end

Interfaces Variádicas

Una interfaz variádica toma un número arbitrario de argumentos. Por ejemplo, println! puede tomar un número arbitrario de argumentos, según lo determinado por la cadena de formato.

Podemos extender la macro calculate! de la sección anterior para que sea variádica:

macro_rules! calculate {
    // El patrón para un solo `eval`
    (eval $e:expr) => {
        {
            let val: usize = $e; // Forzar que los tipos sean enteros
            println!("{} = {}", stringify!{$e}, val);
        }
    };

    // Descomponer múltiples `eval`s de forma recursiva
    (eval $e:expr, $(eval $es:expr),+) => {{
        calculate! { eval $e }
        calculate! { $(eval $es),+ }
    }};
}

fn main() {
    calculate! { // ¡Mira, mamá! `calculate!` variádica
        eval 1 + 2,
        eval 3 + 4,
        eval (2 * 3) + 1
    }
}

Salida:

1 + 2 = 3
3 + 4 = 7
(2 * 3) + 1 = 7

Resumen

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