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