15.2 Overload

매크로는 오버로드 되어 다양한 인자 조합을 허용할 수 있다. 그 점에서, macro_rules!는 match 블록과 유사하게 동작한다.

// `test!`는 `$left`와 `$right`를 비교할 것이다.
// 당신이 어떻게 호출할 지에 따라 다른 방법으로:
macro_rules! test {
    // 인자들은 쉼표로 구분될 필요가 없다.
    // 모든 형태가 사용될 수 있다!
    ($left:expr; and $right:expr) => (
        println!("{:?} and {:?} is {:?}",
                 stringify!($left),
                 stringify!($right),
                 $left && $right)
    );
    // ^ 각 문장은 반드시 세미콜론으로 끝나야만 한다.
    ($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);
}

results matching ""

    No results matching ""