3.2.2.2 过程宏与声明宏 你有没有在深夜调试一个过程宏时,盯着编译器报出的 Option::unwrap() None 一动不动? 有没有写完一个看似完美的 风格的派生宏,却在下游 crate 中突然发现:泛型参数丢失了生命周期约束、 子句被吞掉了、 的签名被悄悄降级成了普通函数? 有没有在 CI 上眼睁睁看着 输出里,你的宏展开结果和预期差了一行 trait bound,而本地 却一切正常——直到你意识到:你忘了为 显式调用 ? 这不是玄学。这是过程宏与声明宏之间那道看似平滑、实则布满暗礁的边界线——而绝大多数 Rust 工程师,第一次真正踩上去时,脚踝已经陷进了 span 语义的泥沼里。