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 (パターン)
  • path
  • stmt ()
  • tt (トークンツリー)
  • ty ()
  • vis (可視性修飾子)

完全な一覧については、Rust Reference を参照してください。