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 的预导入模块中默认可用,无需手动导入。

相关推荐
qq_401700412 分钟前
C语言void*
c语言·开发语言
sg_knight3 分钟前
Python 面向对象基础复习
开发语言·python·ai编程·面向对象·模型
星浩AI5 分钟前
AI 并不懂文字,它只认向量:一文搞懂 Embedding
后端
程序员博博5 分钟前
这才是vibe coding正确的打开方式 - 手把手教你开发一个MCP服务
javascript·人工智能·后端
90后的晨仔12 分钟前
阿里云服务器如何给子账号设置指定具体的那一台服务器?
后端
期待のcode32 分钟前
springboot热部署
java·spring boot·后端
expect7g33 分钟前
Paimon源码解读 -- FULL_COMPACTION_DELTA_COMMITS
大数据·后端·flink
踏浪无痕44 分钟前
周末拆解:QLExpress 如何做到不编译就能执行?
后端·算法·架构
222you1 小时前
Spring框架的介绍和IoC入门
java·后端·spring
毕设源码-朱学姐1 小时前
【开题答辩全过程】以 基于Java的人体骨骼健康知识普及系统为例,包含答辩的问题和答案
java·开发语言