Repetir

Los 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, rodear el comparador con $(...),+ coincidirá con una o más expresiones, separadas por comas. También ten en cuenta que el punto y coma es opcional en el último caso.

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

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