专业的编程技术博客社区

网站首页 > 博客文章 正文

Rust 基础入门-错误处理和宏-过程宏-派生宏

baijin 2024-09-11 00:55:23 博客文章 5 ℃ 0 评论

概念

学习目标:鉴于宏的使用场景大于开发场景,因此本节目标并不要求掌握宏的完整开发流程,了解过程宏的实现原理即可。上一节我们学习了声明式宏,本节我们继续学习过程宏中的派生宏。

派生宏(Derive Macros):通常用于为struct结构体、enum枚举、union类型实现Trait特征(见4.5节 Trait特征)。使用时通过#[derive(CustomMacro)]这样的语法,允许用户轻松地为自定义类型提供一些通用的实现。前文提到三种过程宏(派生宏、属性宏、函数宏),它们的工作方式都是类似的:使用 Rust 的源代码作为输入参数,基于代码进行一系列操作后,再输出一段全新的代码。

一个过程宏的简单框架如下:


proc_macro_derive 稍微特殊一些,因为它需要一个额外的标识符,此标识符将成为 derive 宏的实际名称,如CustomMacro、Clone、Copy等。

input 输入标记流是添加了 derive 属性的类型,它将始终是 enum、struct 或者 union 类型,因为只有这些类型才可以使用 derive 派生宏。

需要说明的是,过程宏中的派生宏输出的代码并不会替换之前的代码,而是在原来代码基础上追加指定宏的 Trait 实现。

文档:

下面的代码我们定义了一个Foo结构体,通常情况下 struct 有许多 Trait 要实现。这里使用了2种方式,一种是常规的impl,另一种是使用宏


这种情况下显然通过derive宏更加方便。但以上两种方式并没有孰优孰劣,主要在于不同的类型是否可以使用同样的默认特征实现,如果可以,那过程宏的方式可以帮我们减少很多代码实现。

示例代码:

这里展示了HelloMacro的核心逻辑,省略了创建crate包的内容。


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表