Rust语言之属性宏(Attribute Macro)derive

文章目录

    • [Rust语言之属性宏(Attribute Macro)derive](#Rust语言之属性宏(Attribute Macro)derive)

Rust语言之属性宏(Attribute Macro)derive

属性宏是一种基于属性的宏,用于修改、扩展或注解 Rust 代码。它们通常用于为函数、结构体、枚举、模块等添加元数据或自定义行为。

属性宏使用 #[...] 语法,可以应用于各种语法结构,例如函数、结构体等。它们可以接收属性中的参数,并根据需要对代码进行转换、生成额外的代码或执行其他逻辑。当出现 #![...] 时候,表示该属性应用于当前模版。

rust 复制代码
use serde::{Deserialize, Serialize};
use serde_with::serde_as;


/// Holds data describing the current state of a program's execution.
#[serde_as]
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ExecutionState {

derive

英/dɪˈraɪv/

美/dɪˈraɪv/

v.

得到;获得;(使)产生;取得;(使)起源

记忆

de- 离开,向下 + riv- 河流,流动 + -e

derive 宏可以用于衍生以下特性或行为:

  • Debug 特性:通过 #[derive(Debug)] 可以自动生成对结构体或枚举类型的调试输出格式的实现,使得可以使用 println! 或 dbg! 宏打印结构体或枚举的实例。
  • Clone 特性:通过 #[derive(Clone)] 可以自动生成对结构体或枚举类型进行克隆的实现,使得可以通过克隆创建新的实例。
  • Copy 特性:通过 #[derive(Copy)] 可以自动生成对结构体或枚举类型进行复制的实现,使得可以通过赋值操作复制实例。
  • Default 特性:通过 #[derive(Default)] 可以自动生成对结构体或枚举类型进行默认值创建的实现,使得可以使用 Default::default() 创建默认值实例。
  • PartialEq, Eq, PartialOrd, Ord 特性:通过 #[derive(PartialEq, Eq, PartialOrd, Ord)] 可以自动生成对结构体或枚举类型进行相等性比较或排序的实现,使得可以使用 ==, !=, <, >, <=, >= 运算符进行比较。
  • Serialize, Deserialize 特性:通过 #[derive(Serialize, Deserialize)] 可以自动生成对结构体或枚举类型进行序列化和反序列化的实现,使得可以方便地将数据转换为字节流或从字节流中恢复数据。

注意:在这段代码中,Debug, Clone, Default 这三个特性(traits)并不需要显式地导入(引入)。

这是因为这些特性已经被包含在标准库(std)中,并且在 Rust 中是预导入的(prelude)。预导入的特性可以在任何地方使用,而无需显式导入它们。

在 Rust 中,Debug, Clone, Default 是一些常见的标准库特性。它们分别用于生成调试输出、克隆对象和创建默认值。由于它们经常被使用,所以在 Rust 的预导入模块中默认可用,无需手动导入。

相关推荐
布列瑟农的星空16 分钟前
前端都能看懂的rust入门教程(五)—— 所有权
rust
子玖1 小时前
go实现通过ip解析城市
后端·go
Java不加班1 小时前
Java 后端定时任务实现方案与工程化指南
后端
心在飞扬2 小时前
RAG 进阶检索学习笔记
后端
Moment2 小时前
想要长期陪伴你的助理?先从部署一个 OpenClaw 开始 😍😍😍
前端·后端·github
Das1_2 小时前
【Golang 数据结构】Slice 底层机制
后端·go
得物技术2 小时前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
古时的风筝2 小时前
花10 分钟时间,把终端改造成“生产力武器”:Ghostty + Yazi + Lazygit 配置全流程
前端·后端·程序员
Cache技术分享2 小时前
340. Java Stream API - 理解并行流的额外开销
前端·后端