Rust 宏的深入解析与应用
1. 宏的基本概念与作用域
宏在 Rust 中是一种强大的代码生成工具。先看一个简单的示例:
let mut x = 1;
please_set!(x, x + 1);
assert_eq!(x, 2);
在宏定义中,我们可以使用 = $i + 1 ,但不能使用 = x + 1 ,因为 x 这个名称在宏的定义作用域中不可用。
对于声明式宏的作用域,有一个重要的规则:与 Rust 中的其他大部分内容不同,声明式宏只有在声明之后才会存在于源代码中。如果你尝试使用在文件中稍后定义的宏,这是行不通的。在项目全局也是如此,如果在一个模块中声明了一个宏,而想在另一个模块中使用它,声明宏的模块必须在 crate 中更早出现。例如,如果 foo 和 bar 是 crate 根目录下的模块,且 foo 声明了一个 bar 想要使用的宏,那么在 lib.rs 中 mod foo 必须出现在 mod bar 之前。
不过,有一个例外情况,如果使用 #[macro_export] 标记宏,这个注解会将宏提升到 crate 的根目录,并将其标记为 pub ,这样它就可以在 crate 的任何地方或 crate
超级会员免费看
订阅专栏 解锁全文
60

被折叠的 条评论
为什么被折叠?



