指示符 - Rust By Example
Description: Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries.

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# 指示符

宏的参数以美元符号 `$` 为前缀，并用指示符来标注类型：

    macro_rules! create_function {
        // 这个宏接受一个 `ident` 指示符的参数，
        // 并创建一个名为 `$func_name` 的函数。
        // `ident` 指示符用于变量/函数名。
        ($func_name:ident) => {
            fn $func_name() {
                // `stringify!` 宏将 `ident` 转换为字符串。
                println!("你调用了 {:?}()",
                         stringify!($func_name));
            }
        };
    }

    // 使用上面的宏创建名为 `foo` 和 `bar` 的函数。
    create_function!(foo);
    create_function!(bar);

    macro_rules! print_result {
        // 这个宏接受一个 `expr` 类型的表达式，
        // 并将其作为字符串打印出来，同时打印其结果。
        // `expr` 指示符用于表达式。
        ($expression:expr) => {
            // `stringify!` 将表达式**原样**转换为字符串。
            println!("{:?} = {:?}",
                     stringify!($expression),
                     $expression);
        };
    }

    fn main() {
        foo();
        bar();

        print_result!(1u32 + 1);

        // 记住，代码块也是表达式！
        print_result!({
            let x = 1u32;

            x * x + 2 * x - 1
        });
    }

以下是一些可用的指示符：

- `block`
- `expr` 用于表达式
- `ident` 用于变量/函数名
- `item`
- `literal` 用于字面常量
- `pat`（模式 pattern）
- `path`
- `stmt`（语句 statement）
- `tt`（标记树 token tree）
- `ty`（类型 type）
- `vis`（可见性限定符 visibility qualifier）

完整列表请参阅 Rust 参考手册。