巨集相比函式是相對難以理解的,更加難以掌握,編寫理解以及除錯都很有困難。但它的存在肯定是有它比較獨特的地方的。相比函式,巨集是用來生成**的,在呼叫巨集的地方,編譯器會先將巨集進行展開,生成**,然後再編譯展開後的**。在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 前者指的是用某種語法直接宣告出的巨集。後者是對應直接生成抽象語法樹的過程的巨集。直覺上過程巨集更隱式,更全能 宣告巨集更可讀,更直接。如何定義宣告巨集?現...