繰り返し
マクロは引数のリストの中で+を使うことができ、そうすることによって、引数が少なくとも1回以上繰り返されるということを示すことができます。同様に*の場合は、0以上を示します。
以下の例では、マッチ対象を $(...),+で囲むことにより、カンマで区切られた1つ以上の式とマッチします。最後のセミコロンは必須ではないことに注目しましょう。
// `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!(1));
println!("{}", find_min!(1 + 2, 2));
println!("{}", find_min!(5, 2 * 3, 4));
}