派生宏是Rust中强大的元编程特性之一,它允许开发者自定义类型上的trait实现,从而在编译期间自动实现trait。派生宏的使用能够大大简化代码,减少重复的工作,提高代码的可读性和可维护性。通过派生宏,我们可以轻松地为自定义的数据类型自动实现常用的trait,如Debug、Serialize、PartialEq等,从而为类型添加更多的功能和特性。
其中DeriveInput包含了 struct 的所有信息, 包括ident(结构体名字)和里面的字段 , 派生宏只能被用于结构体,枚举,Union usesyn::{parse_macro_input,Data,DeriveInput};letident=input.ident;// 结构体的名字, 在这里就是 "Picea"matchinput.data{Data::Struct(data)=>{}// 结构体Data::Enum(data)=>{}//...
是Rust 中一类特殊的过程宏,它们可以用来自动派生某些 Rust 结构体或枚举类型的实现。这种宏通常用于简化代码编写和提高代码可读性。 在Rust 中,可以使用derive属性来为结构体或枚举类型自动实现一些常见的 trait,例如Debug、Clone、Copy、PartialEq等等。当我们在定义结构体或枚举类型时添加derive属性时,编译器会自动为我...
派生宏和属性宏是Rust中两种强大的进阶宏。派生宏可以自动生成实现特定trait的代码,减少手动实现的繁琐性。而属性宏则允许我们为代码添加自定义属性,并在编译时进行处理。通过合理使用这些进阶宏,我们可以提高Rust代码的可读性和可维护性,使项目更加健壮和高效。
过程宏(Procedure Macro)是Rust中的一种特殊形式的宏,提供比普通宏更强大的功能。过程宏主要分三类: 派生宏(Derive macro):用于结构体(struct)、枚举(enum)、联合(union)类型,可为其实现函数或特征(Trait)。 属性宏(Attribute macro):用在结构体、字段、函数等地方,为其指定属性等功能。如标准库中的#[inline]...
1.1 派生宏的定义 在Rust中,派生宏是一种特殊的宏,它允许开发者为自定义的数据类型自动实现trait。派生宏使用proc_macro_derive属性来定义,其基本形式如下: use proc_macro; #[proc_macro_derive(YourTrait)] pub fn your_derive_macro(input: proc_macro::TokenStream) -> proc_macro::TokenStream { ...
过程宏:是一种更为高级的宏,它通过编写Rust代码来处理输入的代码,并在编译期间生成新的代码。过程宏主要用于属性宏(Attribute Macros)、类函数宏(Function-Like Macros)和派生宏(Derive Macros)等场景。 本篇博客将主要介绍声明宏和过程宏。 2. 声明宏(macro_rules!宏) ...
派生宏(Derive Macros):用于自动实现trait(比如Copy、Debug)的宏。 属性宏(Attribute Macros):用于在声明上附加额外的元数据,如#[derive(Debug)]。 过程宏的实现通常需要使用 proc_macro 库提供的功能,例如 TokenStream 和 TokenTree,以便更直接地操纵源代码。
Rust 的过程宏分为三种: 函数宏(function-like macro):看起来像函数的宏,但在编译期进行处理。 属性宏(attribute macro):可以在其他代码块上添加属性,为代码块提供更多功能。 派生宏(derive macro):为 derive 属性添加新的功能,这是我们平时使用最多的宏,比如 #[derive(Debug)] 为数据结构提供 Debug trait 的...
其中Derive Macro 派生宏和 Attribute Marco 宏的区别是:派生宏生成代码,然后将其添加到同一模块中,而属性宏生成代码来替换它们所应用的项目。派生宏用于扩展, 属性宏用于替换。后面在例子中说明。 实践 cargo new custom 新建一个名为custom的工程。 cd custom && cargo new custom-derive 在custom内新建一个名为...