指示符
宏的参数使用一个美元符号 $ 作为前缀,并使用一个指示符(designator)来
注明类型:
1. macro_rules! create_function {
2. // 此宏接受一个 `ident` 指示符表示的参数,并创建一个名为 `$func_name` 的函数。
3. // `ident` 指示符用于变量名或函数名
4. ($func_name:ident) => (
5. fn $func_name() {
6. // `stringify!` 宏把 `ident` 转换成字符串。
7. println!("You called {:?}()",
8. stringify!($func_name))
9. }
10. )
11. }
13. // 借助上述宏来创建名为 `foo` 和 `bar` 的函数。
14. create_function!(foo);
15. create_function!(bar);
17. macro_rules! print_result {
18. // 此宏接受一个 `expr` 类型的表达式,并将它作为字符串,连同其结果一起
19. // 打印出来。
20. // `expr` 指示符表示表达式。
21. ($expression:expr) => (
22. // `stringify!` 把表达式*原样*转换成一个字符串。
23. println!("{:?} = {:?}",
24. stringify!($expression),
25. $expression)
26. )
27. }
29. fn main() {
30. foo();
31. bar();
33. print_result!(1u32 + 1);
35. // 回想一下,代码块也是表达式!
36. print_result!({
37. let x = 1u32;
39. x * x + 2 * x - 1
40. });
41. }
这里列出全部指示符:
blockexpr用于表达式ident用于变量名或函数名itempat(模式 pattern)pathstmt(语句 statement)tt(标记树 token tree)ty(类型 type)
