繰り返し

マクロは引数リストに+を指定することで1回以上の、*を指定することで 0回以上の繰り返しを表現できます。

以下の例で、指定子を$(...),+で囲むことで、コンマで分けられた 一つ以上の式を表現できます。また、最後のセミコロンは省略できます。

// `find_min!`は引数の内最小のものを返します。
macro_rules! find_min {
    // 基本ケース:
    ($x:expr) => ($x);
    // `$x`と1つ以上の`$y,`からなる。
    ($x:expr, $($y:expr),+) => (
        // `find_min!`を末尾の`$y`に対して実行する
        std::cmp::min($x, find_min!($($y),+))
    )
}

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