Варіативні інтерфейси
Варіативний інтерфейс приймає довільну кількість аргументів. Наприклад,
println! може приймати довільну кількість аргументів, як визначає
рядок форматування.
Ми можемо розширити наш макрос calculate! із попереднього розділу, щоб він був варіативним:
macro_rules! calculate {
// The pattern for a single `eval`
(eval $e:expr) => {
{
let val: usize = $e; // Force types to be integers
println!("{} = {}", stringify!{$e}, val);
}
};
// Decompose multiple `eval`s recursively
(eval $e:expr, $(eval $es:expr),+) => {{
calculate! { eval $e }
calculate! { $(eval $es),+ }
}};
}
fn main() {
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