可变参数接口
可变参数接口可以接受任意数目的参数。比如说 println 就可以,其参数的数目是由
格式化字符串指定的。
我们可以把之前的 calculater! 宏改写成可变参数接口:
1. macro_rules! calculate {
2. // 单个 `eval` 的模式
3. (eval $e:expr) => {{
4. {
5. let val: usize = $e; // Force types to be integers
6. println!("{} = {}", stringify!{$e}, val);
7. }
8. }};
10. // 递归地拆解多重的 `eval`
11. (eval $e:expr, $(eval $es:expr),+) => {{
12. calculate! { eval $e }
13. calculate! { $(eval $es),+ }
14. }};
15. }
17. fn main() {
18. calculate! { // 妈妈快看,可变参数的 `calculate!`!
19. eval 1 + 2,
20. eval 3 + 4,
21. eval (2 * 3) + 1
22. }
23. }
输出:
1. 1 + 2 = 3
2. 3 + 4 = 7
3. (2 * 3) + 1 = 7
