第十四章:宏灵境 · 灵咒重铸之术
"术之极者,可铸术自身;言之极者,语法亦可铸。"
顾行云在整理灵术模块时,发现冗余术式重复繁复,若能一术生万术,岂非大成?
此时,一道灵书显现:《宏灵咒典》。
一、声明式宏:macro_rules!
之符
这是一种模式匹配式灵咒,可根据输入匹配并展开。
示例:打印多个灵符
rust
macro_rules! summon {
($($x:expr),*) => {
$(
println!("召唤灵符:{}", $x);
)*
};
}
fn main() {
summon!("火符", "冰符", "雷符");
}
他惊叹:"这不只是语法糖,这是咒语工厂!"
关键要素:
-
$()
:重复匹配模式 -
*
:任意多个(或可用+
表示至少一个) -
$x:expr
:匹配表达式
二、派生宏(derive)之术
顾行云曾手写 Debug
/ Clone
等 trait 实现疲惫不堪,直到他发现派生宏之术:
rust
#[derive(Debug, Clone, PartialEq)]
struct Spell {
name: String,
level: u32,
}
编译灵印自动生成对应 trait 实现,让灵体拥有"调试视界"、"复制术"等能力。
三、过程宏:自造灵纹之顶阶术
若要定义新的属性宏、嵌套规则、改变语法结构 ,必须使用 proc_macro!
步骤如下:
- 创建专属宏法门包(类库)
bush
cargo new spell_macro --lib
- 在
lib.rs
中启用:
rust
extern crate proc_macro;
use proc_macro::TokenStream;
#[proc_macro]
pub fn spirit_bless(input: TokenStream) -> TokenStream {
// 处理语法树,生成新代码
input
}
- 在主项目中调用:
rust
use spell_macro::spirit_bless;
spirit_bless! {
fn chant() {
println!("✨ 灵术被祝福");
}
}
🧠 顾行云逐渐熟练 quote!
, syn
等神级语义操控库,如法如术,开辟自己的语法领域。
宏灵诀 · 拓语之理
语不止所见,亦可被构;术不止于写,亦可自生;宏者,道中之神铸也。