在 rust 各个模块文件中使用宏程序-ag捕鱼王app官网

在 rust 各个模块文件中使用宏程序

作者:迹忆客 最近更新:2023/03/21 浏览次数:

在本文中,我们将学习如何在 rust 中跨模块文件使用宏。

rust 宏

rust 提供了很好的宏支持。例如,通过宏启用的元编程涉及编写编写其他代码的代码。

提供与函数相当的能力,但没有相关的运行时成本。由于在编译时扩展,因此构建时间成本是相关的。

rust 宏与 c 宏有很大不同。例如,rust 宏应用于标记树,而 c 宏替换文本。

语法:

*macrorulesdefinition*:
  `macro_rules``!`[identifier]*macrorulesdef*
macrorules:
   macrorule(;macrorule)*;?macrorule:
   macromatcher=>macrotranscriber

rust 中跨箱子的宏

crate 包括模块范围的层次结构。crate 中的任何对象都有一个规范的模块路径,指示其在模块树中的位置。

在这个树的顶层,有一个匿名模块。rust 源文件指定了一个模块,其名称和在当前 crate 的模块树中的位置是外部定义的:或者通过引用源文件中的显式 module 项。

它也可能是板条箱本身的名称。每个源文件都是一个模块。

然而,并不是每个模块都需要它的源文件:模块定义可以在单个源文件中分层。

板条箱 util

#[macro_export]macro_rules!foo{()=>()}

板条箱用户

useutil::foo;foo!();

请注意,使用此策略时,宏始终位于 crate 的顶层。即使 foo 包含在 mod bar 中,user crate 仍然必须写 use util::foo; 而不是使用 util::bar::foo;

你可以使用 pub use 从 crate 的模块中导出宏。

rust 中同一个 crate 中的宏

foo::bar!();mod foo{macro_rules!bar{()=>()}pub(crate)usebar;}foo::bar!();

宏可以通过 pub use 导入并用作任何其他对象。与旧方法不同,这不依赖于源代码顺序,因此你可以在宏编写之前使用它。

每个都有一个名称和一个或多个规则。每个规则由两部分组成:一个匹配器,它描述它匹配的语法,一个转录器,它描述将被成功匹配的调用替换的语法。

分隔符必须包含匹配器和转录器。表达式、语句、特征、实现、外来项、类型和模式可以通过宏进行扩展。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

发布时间:2024/02/05 浏览次数:134 分类:编程语言

本教程是关于 rust 中 rc::clone(&rc) 和 rc.clone() 之间的区别。

发布时间:2024/02/05 浏览次数:107 分类:编程语言

rust 有一个 & 符号特性,可用于在代码中的任何位置使任何变量可变或不可变。

发布时间:2023/03/21 浏览次数:269 分类:编程语言

这个简短的教程演示了如何使用 rust 中的 abs() 函数获取绝对值。

发布时间:2023/03/21 浏览次数:205 分类:编程语言

本教程演示了在 rust 结构中初始化变量的简短方法。

发布时间:2023/03/21 浏览次数:148 分类:编程语言

本教程演示了在 rust 中克隆 arc 时会发生什么。

发布时间:2023/03/21 浏览次数:223 分类:编程语言

本教程演示了在不同版本的 rust 中读取和写入文件的方式。

发布时间:2023/03/21 浏览次数:140 分类:编程语言

本教程是关于 rust 中 rc::clone(&rc) 和 rc.clone() 之间的区别。

发布时间:2023/03/21 浏览次数:242 分类:编程语言

本教程演示了 rust 的逐步交互式调试器。

发布时间:2023/03/21 浏览次数:374 分类:编程语言

本教程是关于使用 rust-image 以程序方式生成图像的。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便
网站地图