## 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!("{:?} 和 {:?} 是 {:?}",
                     stringify!($left),
                     stringify!($right),
                     $left && $right)
        };
        // ^ 每个分支必须以分号结束。
        ($left:expr; or $right:expr) => {
            println!("{:?} 或 {:?} 是 {:?}",
                     stringify!($left),
                     stringify!($right),
                     $left || $right)
        };
    }

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