Sobrecarga de macros de Rust con macro_rules!

Beginner

This tutorial is from open-source community. Access the source code

Introducción

En este laboratorio, aprenderá cómo se pueden sobrecargar macros en Rust utilizando la sintaxis macro_rules!, lo que permite que acepten diferentes combinaciones de argumentos.

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.

Sobrecarga

Las macros pueden ser sobrecargadas para aceptar diferentes combinaciones de argumentos. Al respecto, macro_rules! puede funcionar de manera similar a un bloque match:

// `test!` comparará `$left` y `$right`
// de diferentes maneras dependiendo de cómo se invoque:
macro_rules! test {
    // Los argumentos no necesitan estar separados por una coma.
    // ¡Se puede utilizar cualquier plantilla!
    ($left:expr; and $right:expr) => {
        println!("{:?} and {:?} is {:?}",
                 stringify!($left),
                 stringify!($right),
                 $left && $right)
    };
    // ^ cada brazo debe terminar con un punto y coma.
    ($left:expr; or $right:expr) => {
        println!("{:?} or {:?} is {:?}",
                 stringify!($left),
                 stringify!($right),
                 $left || $right)
    };
}

fn main() {
    test!(1i32 + 1 == 2i32; and 2i32 * 2 == 4i32);
    test!(true; or false);
}

Resumen

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