識別子 - 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の引数は`$`が頭につきます。型は 識別子 でアノテーションされます。

    macro_rules! create_function {
        // このマクロは`ident`識別子に対応する値を引数として取り
        // `$func_name`という名の関数を作成します。
        // `ident`識別子は関数・変数の名前用の識別子です。
        ($func_name:ident) => {
            fn $func_name() {
                // `stringify!`というマクロは`ident`を文字列に変えます。
                println!("You called {:?}()",
                         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`（パターン）
- `path`
- `stmt`（宣言）
- `tt`（トークンツリー）
- `ty`（型）
- `vis`（可視性修飾子）（訳注：`pub (crate)`とか）

完全なリストを見るには、Rustリファレンスを読んでください。