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));
}

results matching ""

    No results matching ""