找回密码
 立即注册
首页 业界区 业界 Rust修仙之道 第十四章 宏灵境 · 灵咒重铸之术 ...

Rust修仙之道 第十四章 宏灵境 · 灵咒重铸之术

王妍芳 2025-7-12 17:34:56
第十四章:宏灵境 · 灵咒重铸之术

“术之极者,可铸术自身;言之极者,语法亦可铸。”
顾行云在整理灵术模块时,发现冗余术式重复繁复,若能一术生万术,岂非大成?
此时,一道灵书显现:《宏灵咒典》
一、声明式宏:macro_rules! 之符

这是一种模式匹配式灵咒,可根据输入匹配并展开。
示例:打印多个灵符
  1. macro_rules! summon {
  2.     ($($x:expr),*) => {
  3.         $(
  4.             println!("召唤灵符:{}", $x);
  5.         )*
  6.     };
  7. }
  8. fn main() {
  9.     summon!("火符", "冰符", "雷符");
  10. }
复制代码
他惊叹:“这不只是语法糖,这是咒语工厂!”
关键要素:

  • $():重复匹配模式
  • *:任意多个(或可用 + 表示至少一个)
  • $x:expr:匹配表达式
二、派生宏(derive)之术

顾行云曾手写 Debug / Clone 等 trait 实现疲惫不堪,直到他发现派生宏之术:
  1. #[derive(Debug, Clone, PartialEq)]
  2. struct Spell {
  3.     name: String,
  4.     level: u32,
  5. }
复制代码
编译灵印自动生成对应 trait 实现,让灵体拥有“调试视界”、“复制术”等能力。
三、过程宏:自造灵纹之顶阶术

若要定义新的属性宏、嵌套规则、改变语法结构,必须使用 proc_macro
步骤如下:

  • 创建专属宏法门包(类库)
  1. cargo new spell_macro --lib
复制代码

  • 在 lib.rs 中启用:
  1. extern crate proc_macro;
  2. use proc_macro::TokenStream;
  3. #[proc_macro]
  4. pub fn spirit_bless(input: TokenStream) -> TokenStream {
  5.     // 处理语法树,生成新代码
  6.     input
  7. }
复制代码

  • 在主项目中调用:
  1. use spell_macro::spirit_bless;
  2. spirit_bless! {
  3.     fn chant() {
  4.        println!("✨ 灵术被祝福");
  5.     }
  6. }
复制代码

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册