当前位置: 首页 > news >正文

【quantity】5 derive_more库 2.0 版介绍

derive_more 是一个 Rust 过程宏库,旨在通过派生宏自动生成常见 trait 的实现,减少样板代码。2.0 版本带来了多项改进和新特性。

主要特性

1. 支持的 Trait 派生

derive_more 2.0 支持派生以下 trait:

基本操作 trait:
  • Display - 格式化显示

  • Debug - 调试输出

  • From/Into - 类型转换

  • FromStr - 从字符串解析

  • Index/IndexMut - 索引操作

  • Deref/DerefMut - 解引用操作

  • Constructor - 简化结构体构造

算术运算 trait:
  • Add/AddAssign - 加法

  • Sub/SubAssign - 减法

  • Mul/MulAssign - 乘法

  • Div/DivAssign - 除法

  • Rem/RemAssign - 取余

  • Neg - 取负

  • Not - 逻辑非

  • BitAnd/BitAndAssign - 按位与

  • BitOr/BitOrAssign - 按位或

  • BitXor/BitXorAssign - 按位异或

  • Shl/ShlAssign - 左移

  • Shr/ShrAssign - 右移

2. 2.0 版本新特性
  • 性能优化:减少了编译时间和生成的代码量

  • 更好的错误信息:更清晰的编译错误提示

  • 更灵活的配置:通过属性提供更多自定义选项

  • 支持更多 trait:新增了几个常用 trait 的派生支持

  • 改进的文档:更详细的文档和示例

使用示例

基本使用
use derive_more::{Display, From, Add};#[derive(Display, From, Add)]
struct MyInt(i32);let my_int = MyInt(10);
println!("{}", my_int); // 输出: 10
let sum = my_int + MyInt(20); // 可以使用加法
自定义显示格式
use derive_more::Display;#[derive(Display)]
#[display(fmt = "({}, {})", x, y)]
struct Point {x: i32,y: i32,
}println!("{}", Point { x: 1, y: 2 }); // 输出: (1, 2)
枚举支持
use derive_more::{Display, From};#[derive(Display, From)]
enum MyEnum {#[display(fmt = "Int: {}", _0)]Int(i32),#[display(fmt = "Float: {}", _0)]Float(f64),
}println!("{}", MyEnum::Int(10)); // 输出: Int: 10
println!("{}", MyEnum::Float(3.14)); // 输出: Float: 3.14
运算符重载
use derive_more::{Add, Mul};#[derive(Add, Mul, Clone, Copy)]
struct Vec2 {x: f64,y: f64,
}let v1 = Vec2 { x: 1.0, y: 2.0 };
let v2 = Vec2 { x: 3.0, y: 4.0 };
let sum = v1 + v2; // Vec2 { x: 4.0, y: 6.0 }
let product = v1 * v2; // Vec2 { x: 3.0, y: 8.0 }

配置选项

derive_more 提供了多种属性来自定义派生行为:

  • #[display(fmt = “…”)] - 自定义显示格式

  • #[from(forward)] - 转发 From 实现

  • #[from(skip)] - 跳过某些 From 实现

  • #[add(forward)] - 转发加法操作

  • #[mul(forward)] - 转发乘法操作

与标准库的比较

derive_more 相比手动实现或使用标准库的派生有以下优势:

  1. 减少样板代码:自动生成大量重复的 trait 实现

  2. 一致性:确保所有相关 trait 实现行为一致

  3. 灵活性:提供更多自定义选项

  4. 扩展性:支持标准库没有的 trait 组合

适用场景

  • 需要为自定义类型实现多个 trait 时

  • 需要快速原型开发时

  • 当 trait 实现逻辑相对简单直接时

  • 当需要确保一组相关 trait 实现一致时

注意事项

  • 对于复杂逻辑的 trait 实现,可能需要手动实现

  • 某些 trait 组合可能有冲突,需要注意编译错误

  • 生成的代码可能不如手动优化的代码高效

derive_more 2.0 通过提供更强大、更灵活的派生宏,显著简化了 Rust 中常见 trait 的实现工作。

相关文章:

  • 藏文情感分析器入门学习实践
  • 正态分布全景解析:理论、推导与应用
  • aws(学习笔记第四十课) image-content-search
  • 【Java IO流】字节输入流FileInputStream、字节输出流FileOutputStream
  • Servlet 解决了什么问题?
  • 数字智慧方案6190丨智慧应急综合平台解决方案(49页PPT)(文末有下载方式)
  • 数字智慧方案5856丨智慧环保综合解决方案(50页PPT)(文末有下载方式)
  • C# 多态性详解:从静态到动态的编程艺术
  • 类与对象(中)
  • SpringBoot基础(原理、项目搭建、yaml)
  • 【C++】红黑树迭代版
  • 阿里发布新一代通义千问 Qwen3模型
  • 第 5 篇:红黑树:工程实践中的平衡大师
  • btrace2.0使用方法
  • 多模态大语言模型arxiv论文略读(五十四)
  • 大模型在终末期肾脏病风险预测与临床方案制定中的应用研究
  • 架构进阶:深入学习企业总体架构规划(Oracle 战略专家培训课件)【附全文阅读】
  • 解决C4D中ProRender渲染黑屏
  • Linux运维中常用的磁盘监控方式
  • STL之vector容器
  • AI世界的年轻人|与总书记交流过的“00后”,渴望紧握时代赋予的接力棒
  • 亚马逊一季度利润增超六成:云业务增速放缓,警告关税政策或影响业绩指引
  • 韩国前国务总理韩德洙正式宣布参加总统选举
  • 净海护渔,中国海警局直属第一局开展伏季休渔普法宣传活动
  • 西部航空回应飞机上卖彩票:与重庆福彩合作,仅部分航班售卖
  • 宿州市委副书记任东已任市政府党组书记