可変個引数によるインターフェース
可変個引数のインターフェースとは、任意の数の引数を取るものです。
例えば、println!
は、フォーマット文字列の定義に従い、任意の数の引数を取ることができます。
前のセクションのcalculate!
マクロを、可変個引数に拡張することができます:
macro_rules! calculate { // 単一の`eval`のためのパターン // The pattern for a single `eval` (eval $e:expr) => {{ { let val: usize = $e; // Force types to be integers println!("{} = {}", stringify!{$e}, val); } }}; // 複数の`eval`を再帰的に分解する // Decompose multiple `eval`s recursively (eval $e:expr, $(eval $es:expr),+) => {{ calculate! { eval $e } calculate! { $(eval $es),+ } }}; } fn main() { // ほら!可変な`calculate!`だよ! calculate! { // Look ma! Variadic `calculate!`! eval 1 + 2, eval 3 + 4, eval (2 * 3) + 1 } }
出力:
1 + 2 = 3
3 + 4 = 7
(2 * 3) + 1 = 7