Rust中巨集的理解

2021-08-10 16:20:28 字數 762 閱讀 3872

巨集相比函式是相對難以理解的,更加難以掌握,編寫理解以及除錯都很有困難。但它的存在肯定是有它比較獨特的地方的。相比函式,巨集是用來生成**的,在呼叫巨集的地方,編譯器會先將巨集進行展開,生成**,然後再編譯展開後的**。在rust中,函式是不接受任意多個引數的,巨集可以辦到。

巨集定義格式

macro_rules! macro_name
具體用法可參考: 巨集.html 示例

這裡不講巨集的具體用法,只以乙個應用中的例項為例,說明巨集在rust中的使用。下面是示例程式**:

巨集定義**:

//! crate malib 

pub fn print_null()

pub fn print_x

(x:&str)

", x);}

pub fn print_x_y

(x:&str, y:

&str)

, {}"

, x, y);}

#[macro_export]

macro_rules! print_macro

執行以下**:

#[macro_use]

extern crate malib;

fn main()

結果如下:

pars: null

pars: ***

pars: ***, yyy

rust巨集的復用

由於這一部分別人已經寫過就不多贅述,放個鏈結 假如我們在crate中想要寫乙個巨集,為了美觀將其單獨放在了乙個檔案中,假設叫macros.rs,如下圖所示 如果我們想在同一層級的node.rs中使用這個巨集,那麼需要做的就是在這個巨集前加上 macro export 並且在lib.rs中新增 mac...

Rust 過程巨集

一 新增過程巨集依賴庫1 過程巨集,類似其他語言的執行時反射機制 2 官方的過程巨集庫為proc macro,不推薦直接使用 3 推薦更友好的syn quote和proc macro2這3個庫 4 過程巨集,必須寫在單獨的lib型別的crate中 lib proc macro true depend...

Rust 巨集筆記

rust 巨集筆記 這篇文章說的是?rust 的巨集。宣告巨集 declarative macro 和過程巨集 procedural macro 前者指的是用某種語法直接宣告出的巨集。後者是對應直接生成抽象語法樹的過程的巨集。直覺上過程巨集更隱式,更全能 宣告巨集更可讀,更直接。如何定義宣告巨集?現...