Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

오버로드

매크로는 서로 다른 인자 조합을 수용하도록 오버로딩될 수 있습니다. 그런 점에서는 macro_rules!match 블록과 비슷하게 작동할 수 있습니다:

// `test!`는 호출 방식에 따라 `$left`와 `$right`를
// 서로 다른 방식으로 비교할 것입니다:
macro_rules! test {
    // 인자들은 콤마로 구분될 필요가 없습니다.
    // 어떤 템플릿이든 사용될 수 있습니다!
    ($left:expr; and $right:expr) => {
        println!("{:?} and {:?} is {:?}",
                 stringify!($left),
                 stringify!($right),
                 $left && $right)
    };
    // ^ 각 팔(arm)은 세미콜론으로 끝나야 합니다.
    ($left:expr; or $right:expr) => {
        println!("{:?} or {:?} is {:?}",
                 stringify!($left),
                 stringify!($right),
                 $left || $right)
    };
}

fn main() {
    test!(1i32 + 1 == 2i32; and 2i32 * 2 == 4i32);
    test!(true; or false);
}