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