可変長インターフェイス
可変長 インターフェイスは任意の数の引数を受け取ります。たとえば、 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