## 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!`はマッチと似たような使い方をすることができます。

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