可変個引数 - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## 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

# 可変個引数によるインターフェース

_可変個引数の_インターフェースとは、任意の数の引数を取るものです。例えば、`println!`は、フォーマット文字列の定義に従い、任意の数の引数を取ることができます。

前のセクションの`calculate!`マクロを、可変個引数に拡張することができます：

    macro_rules! calculate {
        // 単一の`eval`のためのパターン
        (eval $e:expr) => {
            {
                let val: usize = $e; // 強制的に型を整数にします。
                println!("{} = {}", stringify!{$e}, val);
            }
        };

        // 複数の`eval`を再帰的に分解します。
        (eval $e:expr, $(eval $es:expr),+) => {{
            calculate! { eval $e }
            calculate! { $(eval $es),+ }
        }};
    }

    fn main() {
        calculate! { // ほら！可変な`calculate!`だよ！
            eval 1 + 2,
            eval 3 + 4,
            eval (2 * 3) + 1
        }
    }

出力はこうなります：

    1 + 2 = 3
    3 + 4 = 7
    (2 * 3) + 1 = 7