我们之前有了解过,过程宏有三种,分别是函数宏(Function-like,其实叫函数式过程宏会好一点,但是太长了,所以后面同一去掉中间一段,另外两个宏同理),属性宏(Attribute)以及派生宏(Derive)。 所以接下来分三小章节来介绍下它们。 不过在介绍之前,我们还需要了解下过程宏的一些点。 和声明宏不同的是,过程宏使用函数的...
是Rust 中一类特殊的过程宏,它们可以用来自动派生某些 Rust 结构体或枚举类型的实现。这种宏通常用于简化代码编写和提高代码可读性。 在Rust 中,可以使用derive属性来为结构体或枚举类型自动实现一些常见的 trait,例如Debug、Clone、Copy、PartialEq等等。当我们在定义结构体或枚举类型时添加derive属性时,编译器会自动为我...
派生宏(Derive macro):用于结构体(struct)、枚举(enum)、联合(union)类型,可为其实现函数或特征(Trait)。 属性宏(Attribute macro):用在结构体、字段、函数等地方,为其指定属性等功能。如标准库中的#[inline]、#[derive(...)]等都是属性宏。 函数式宏(Function-like macro):用法与普通的规则宏类似,但功能...
过程宏:是一种更为高级的宏,它通过编写Rust代码来处理输入的代码,并在编译期间生成新的代码。过程宏主要用于属性宏(Attribute Macros)、类函数宏(Function-Like Macros)和派生宏(Derive Macros)等场景。 本篇博客将主要介绍声明宏和过程宏。 2. 声明宏(macro_rules!宏) 2.1 基本示例 让我们从一个简单的例子开始...
rust中过程宏示例: 准备工作 [lib] proc-macro = true [dependencies] syn = { version = "1.0", features = ["full"] } quote = "1.0" proc-macro2 = "1.0" 定义一个过程宏: proc_macro_derive externcrateproc_macro;useproc_macro::TokenStream;usequote::{format_ident,quote};usesyn::{self,pa...
派生宏(Derive Macros):用于自动实现trait(比如Copy、Debug)的宏。 属性宏(Attribute Macros):用于在声明上附加额外的元数据,如#[derive(Debug)]。 过程宏的实现通常需要使用 proc_macro 库提供的功能,例如 TokenStream 和 TokenTree,以便更直接地操纵源代码。
过程宏接收一个TokenStream作为参数并返回另一个TokenStream。过程宏对输入的TokenStream进行操作并产生一个输出。有三种类型的过程宏: 属性式宏(Attribute-like macros) 派生宏(Derive macros) 函数式宏(Function-like macros) 接下来我们将会对它们进行详细讨论。
Rust 过程宏定义分三种 #[proc_macro] 函数似宏 和macro_rules! 功能类似,但更为强大。 2. #[proc_macro_derive(Name)] 派生宏 用于结构体(struct)、枚举(enum)、联合(union)类型,可为其实现函数或特征(Trait) 3. #[proc_macro_attribute] 属性宏 ...
过程宏:是一种更为高级的宏,它通过编写Rust代码来处理输入的代码,并在编译期间生成新的代码。过程宏主要用于属性宏(Attribute Macros)、类函数宏(Function-Like Macros)和派生宏(Derive Macros)等场景。 本篇博客将主要介绍声明宏和过程宏。 2. 声明宏(macro_rules!宏) ...
Rust中的声明宏和过程宏 宏是Rust语言中的一个重要特性,它允许开发人员编写可重用的代码,以便在编译时扩展和生成新的代码。宏可以帮助开发人员减少重复代码,并提高代码的可读性和可维护性。Rust中有两种类型的宏:声明宏和过程宏。 声明宏: 声明宏是一种用于定义新的宏