15.3 Repeat
매크로는 인자 목록에서 +
를 사용하여 인자가 적어도 한 번 이상 반복 될 수 있음을 나타내고 *
는 0번 혹은 그 이상 반복할 것을 의미한다.
다음 예제에서, $(...),+
으로 둘러쌓인 matcher는 콤마로 분리된 하나 혹은 그 이상 표현과 적합한 것을 찾는다. 또한 마지막 케이스의 경우 세미콜론이 옵션사항이다.
// `min!`은 모든 인자 숫자 중에 최소 값을 계산해낸다. macro_rules! find_min { // 기본 경우: ($x:expr) => ($x); // `$y,`가 최소 하나 이상 따르는 `$x` ($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)); }