1. 程式人生 > 其它 >【Rust】巨集-標誌符

【Rust】巨集-標誌符

環境

  • Rust 1.56.1
  • VSCode 1.61.2

概念

參考:https://doc.rust-lang.org/rust-by-example/macros/designators.html

示例

以下是可以使用的標誌符:

  • block
  • expr 表示式
  • ident 變數名或函式名
  • item
  • literal 字面量
  • pat 模式
  • path
  • stmt 語句
  • tt 標記樹
  • ty 型別
  • vis 可見性修飾符

main.rs

macro_rules! create_function {
    // 使用了 iden 標誌符,引數名以$開頭
    ($func_name:ident) => {
        // 將傳入的引數名作為了函式名
        fn $func_name() {
            // `stringify!` 將 iden 傳為字串
            println!("You called {:?}()", stringify!($func_name));
        }
    };
}

// 使用巨集建立了兩個函式
create_function!(foo);
create_function!(bar);

macro_rules! print_result {
    // expr 表示表示式
    ($expression:expr) => {
        // $expression求結果
        println!("{:?} = {:?}", stringify!($expression), $expression);
    };
}

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

    print_result!(1u32 + 1);
    print_result!({
        let x = 1u32;
        x * x + 2 * x - 1
    });
}

總結

瞭解了 Rust 中帶有引數的巨集的定義,引數可以有不同的型別。

附錄