Повторение
Макросы могут использовать знак +
в списке аргументов, чтобы указать, какие аргументы
могут повторяться хоть один раз, или знак *
, чтобы указать, какие аргументы могут
повторяться ноль или несколько раз.
В следующем примере, шаблон, окружённый $(...),+
будет
сопоставлять одно или несколько выражений, разделённых запятыми.
Также обратите внимание, что точка с запятой является
необязательной в последнем случае.
// `min!` посчитает минимальное число аргументов. macro_rules! find_min { // Простой вариант: ($x:expr) => ($x); // `$x` следует хотя бы одному `$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)); }