当前位置: 首页 > 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 的实现工作。

相关文章:

【quantity】5 derive_more库 2.0 版介绍

derive_more 是一个 Rust 过程宏库,旨在通过派生宏自动生成常见 trait 的实现,减少样板代码。2.0 版本带来了多项改进和新特性。 主要特性 1. 支持的 Trait 派生 derive_more 2.0 支持派生以下 trait: 基本操作 trait: Display - 格式化显…...

Qt编译报错:Unexpected compiler version, expected Clang 18.0.0 or newer——Qt安装MSVC编译器

截止到本人所使用的Qt6.6.3为止,Qt尚不支持MSVC2022编译器的默认编译器配制。所以,在Qt构建套件中使用MSVC编译器的话,可能仍需要调整Visual Studio版本,或者手动设置MSVC编译器。 如果你的系统安装的是Visual Studio2022&#x…...

(转)角色与动画的性能优化 | UnrealFest演讲干货

八、蓝图 8.1. Tick 优化的重点关注对象——Tick事件。在不需要的情况下,请默认关闭Tick。 在蓝图中Actor上关掉还不行,Component也需要关掉。 在CPP中,我们可以从PrimaryActorTick或PrimaryComponentTick中关闭Tick。 如果需要Tick&…...

小程序云开发-环境配置

如果点 云开发 没有反应,需要修改软件安装目录不要有中文,但软件名可以是中文: 首次使用,会送1个月的云开发,配置后要等10分钟以后,才可以使用 如果不能选择环境,关掉重新打开一次。 然后记…...

【c++】【STL】priority_queue详解

目录 priority_queue的作用priority_queue的接口构造函数emptysizetoppushpopswap priority_queue的实现仿函数(函数对象)是什么?向上调整算法(adjustup)向下调整算法(adjustdown)迭代器构造pus…...

C语音中的三元运算符

一、三元运算符的基本语法​ 三元运算符,也被称为条件运算符,是 C 语言中唯一有三个操作数的运算符。它的语法格式为:condition ? expression1 : expression2。从语法结构可以看出,三元运算符由一个条件表达式和两个普通表达式组…...

C++模板知识

目录 引言 一、非类型模板参数 二、类模板的特化 (一)概念 (二)函数模板特化 (三)类模板特化 1. 全特化 2. 偏特化 (四)类模板特化应用示例 三、模板的分离编译 …...

MCP 探索:微软 Microsoft MarkItDown MCP ,可把 Word、Excel 等转换成 MarkDown 格式

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 MCP 探索:微软 Microsoft MarkItDown MCP ,可把 Word、Excel 等转换成 MarkDown 格式…...

文本中地理位置提取方法—正则和NLP模型

这里写目录标题 一、提取地址列后12个字二、正则表达式删除不需要的文本三、保留关键字并删除之后的字四、相似度计算,查重五、去重 大量的文本中识别数据,要充分考虑效率和准确率。本文的方案是通过正则和NLP门址模型联合识别的方案。 首先利用现有粗略…...

AI大模型-RAG到底能做些什么?

RAG常见的应用场景,有以下几个方面: 1.智能客服系统:比如电商领域,对客户提出的常见问题,进行自动回复。减少人力成本。 2.人力资源管理:一个新的员工,入职一家大型公司,公司中有各…...

【算法基础】冒泡排序算法 - JAVA

一、算法基础 1.1 什么是冒泡排序 冒泡排序是一种简单直观的比较排序算法。它重复地走访待排序的数列,依次比较相邻两个元素,如果顺序错误就交换它们,直到没有元素需要交换为止。 1.2 基本思想 比较相邻元素:从头开始&#xf…...

Nginx搭建test服务器

创建test域名 进入阿里云添加解析 创建域名:test.xxxxx.com 服务器复制项目代码 新建目录,Git拉取项目代码,安装上插件包 修改配置文件,启动测试服务 修改配置文件“服务器接口” 开启服务pm2 start app.js --name "t…...

依赖倒置原则

当然可以!这次我们来详细讲解 依赖倒置原则(DIP: Dependency Inversion Principle),它是 SOLID 五大设计原则中的压轴,也是最关键的“架构型原则”。 我将从: 什么是依赖倒置原则(定义&#x…...

PostgreSQL 的 VACUUM 与 VACUUM FULL 详解

PostgreSQL 的 VACUUM 与 VACUUM FULL 详解 一、基本概念对比 特性VACUUMVACUUM FULL定义常规维护操作,清理死元组激进重组操作,完全重写表数据锁级别不阻塞读写(共享锁)排他锁(阻塞所有操作)空间回收只标记空间为可用,不返还OS空间返还操作…...

SQL面试题——留存分析之使用bitmap 计算留存

使用bitmap 计算留存 之前我们说过,留存分析其实在企业数据分析中,是很基础但是也很重要的,留存分析可以反映产品的发展是否健康,是否可持续发展,之前我们介绍过,可以看看之前的文章 SQL面试题——留存分析 因为使用工具的限制,所以我们实现方式也会有所不同,之前我们…...

P2415集合求和 题解

P2415 集合求和 题解 公式推导: 设集合有 n 个元素,记为 a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1​,a2​,…,an​。 每个子集要么包含某个元素,要么不包含。 我们固定某个元素 a k a_k ak​,再从剩下的 n − 1 n -…...

【2025年五一数学建模竞赛】C题 完整论文 模型建立与求解

目录 2025年五一数学建模竞赛 C题完整论文:建模与求解 Matlab代码一、问题重述二、模型假设与符号说明2.1 模型基本假设2.2 符号说明 问题一:预测博主新增关注数问题二:预测用户的新关注行为问题三:预测用户在线状态及互动博主问题…...

wpf 输入框 在输入时去除水印

wpf ScrollViewer 在输入数据时去除水印 在WPF(Windows Presentation Foundation)中,ScrollViewer控件通常用于显示滚动内容。如果你想在ScrollViewer中使用数据输入(例如文本输入),并且希望在输入时去除水…...

数字智慧方案5857丨智慧机场解决方案与应用(53页PPT)(文末有下载方式)

资料解读:智慧机场解决方案与应用 详细资料请看本解读文章的最后内容。 随着科技的飞速发展,智慧机场的建设已成为现代机场发展的重要方向。智慧机场不仅提升了旅客的出行体验,还极大地提高了机场的运营效率。本文将详细解读沃土数字平台在…...

C语言-指针(二)

一级指针 一级指针指的是存储了变量地址的指针 一级指针的变量类型是 类型 * 一级指针的类型与变量的类型有些不同 例:int * p 前面的int * 是该地址的类型 int a 0; int * p a; 这里的指针 p 就是一级指针 二级指针 指针变量也是变量因此也会有地…...

React 组件prop添加类型

给函数的props做注解 import { useState } from reacttype Props { className:string,title?:string } // 自定义一个Button组件 function Button(props:Props){// 解构出classname\const {className} propsreturn <button className{className}>点击我</button&g…...

Spring Boot中集成Guava Cache或者Caffeine

一、在Spring Boot(1.x版本)中集成Guava Cache 注意&#xff1a; Spring Boot 2.x用户&#xff1a;优先使用Caffeine&#xff0c;性能更优且维护活跃。 1. 添加依赖 在pom.xml中添加Guava依赖&#xff1a; <dependency><groupId>com.google.guava</groupId&…...

全感官交互革命:当 AI 大模型学会 “看、听、说、创”

引言&#xff1a;从 “文字对话” 到 “全感官体验”&#xff0c;AI 正在重塑人类认知边界 当 AI 不再局限于文本对话&#xff0c;而是能 “看懂” 图像、“听懂” 语音、“生成” 视频&#xff0c;并将这些模态无缝融合时&#xff0c;一场关于人机交互的革命已然开启。DeepSe…...

Linux 库文件详解

Linux 库文件详解 一、库文件概述 库文件是预先编译好的方法的集合&#xff0c;它为程序员提供了一种方便的方式来复用代码。在 Linux 系统中&#xff0c;主要有两种类型的库文件&#xff1a;静态库和共享库。 静态库&#xff08;.a 文件&#xff09; 使用静态库&#xff0…...

蒙特卡罗方法(Monte Carlo Method)​​:基于随机采样的数值计算与模拟技术

​​核心思想​​ 蒙特卡罗方法通过​​随机采样​​和​​统计模拟​​解决数学、物理、工程等领域的复杂问题&#xff0c;其核心是利用​​大数定律​​——当样本量足够大时&#xff0c;样本均值会收敛于期望值。 ​​关键特点​​&#xff1a; ​​无维度诅咒​​&#x…...

HTTPS协议:更安全的HTTP

目录 1. 前言 2. HTTP 与 HTTPS&#xff1a;安全的分水岭 2.1 HTTP 的安全隐患 2.2 HTTPS 的安全提升 3. HTTPS 的核心概念 3.1 加密三剑客&#xff1a;对称加密、非对称加密与哈希算法 3.2 SSL/TLS 握手过程&#xff1a;建立安全通道的关键步骤 3.3 数字证书&#xff…...

Flutter BottomNavigationBar 详解

目录 一、引言 二、BottomNavigationBar 的基本用法 三、主要属性 1. 基本配置 2. 导航项配置 3. 导航类型选择 四、高级功能实现 1. 结合 PageView 实现滑动切换 2. 添加徽章提示 3. 自定义凸起按钮&#xff08;FAB融合&#xff09; 4. 渐变背景实现 五、自定义 B…...

吴恩达深度学习作业 RNN模型——字母级语言模型

一. 简单复习一下RNN RNN RNN适用于处理序列数据&#xff0c;令是序列的第i个元素&#xff0c;那么就是一个长度为的序列&#xff0c;NLP中最常见的元素是单词&#xff0c;对应的序列是句子。 RNN使用同一个神经网络处理序列中的每一个元素。同时&#xff0c;为了表示序列的…...

数字时代,如何为个人信息与隐私筑牢安全防线?

首席数据官高鹏律师团队编著 在当今数字化时代&#xff0c;个人信息和隐私保护至关重要。我们在享受数字生活带来的便利时&#xff0c;也面临着个人信息泄露、隐私被侵犯的风险。下面将从先进技术和法律途径两个方面&#xff0c;探讨如何严格保护个人信息和隐私。 一、先进技…...

javascript交换值最好三种

代码 1. 位运算(性能高&#xff0c;但只能用于整数) var a15; var b32; console.log(a) //15 console.log(b) //32 a a ^ b; b a ^ b; a a ^ b; console.log(a) //32 console.log(b) //152. 数组结构(性能高&#xff0c;但要ES6) var a15; var b32; console.log(…...

C++-Lambda表达式

目录 1.什么是 Lambda&#xff1f; 2.例子&#xff1a;打印每个元素&#xff08;和 for_each 一起用&#xff09; 3.捕获外部变量&#xff08;Capture&#xff09; 3.1. 捕获值&#xff08;拷贝&#xff09;&#xff1a;[] 3.2. 捕获引用&#xff1a;[&] 3.3. 指定捕…...

逻辑回归的多分类实战:以鸢尾花数据集为例

文章目录 引言&#xff1a;从二分类到多分类一、多分类问题无处不在二、One-vs-All策略揭秘1. 核心思想2. 数学表达 三、鸢尾花分类完整实现1. 环境准备2. 数据加载与探索3. 数据预处理4. 模型训练与评估5. 决策边界可视化 四、关键参数解析五、总结 引言&#xff1a;从二分类到…...

[面试]SoC验证工程师面试常见问题(一)

SoC验证工程师面试常见问题(一) 摘要:在面试 SoC 验证工程师职位时,面试官通常会重点考察候选人对 SystemVerilog 和 UVM (Universal Verification Methodology) 的掌握程度,因为这两者是现代 IC 验证的核心技能。以下是可能会被问到的常见问题,涵盖 SystemVerilo…...

传统银行服务和 区块链支付无缝融合的一种解决方案

Dragonfly Capital 的合伙人 Alex Pack 曾表示:“DeFi 的目标是重构全球银行体系,并打造开放且无须许可的经营环境。”在 DeFi 的金融世界中,加密资产架构在区块链上,通过各个协议实现资产之间的高效转移和价值的实时流通,如 Metamask 钱包的自托管,Uniswap 的资产交易,…...

大语言模型能力评定探讨

有标准答案的评估&#xff08;选择题&#xff09; 评估语言模型能力的基本思路是准备输入和标准答案&#xff0c;比较不同模型对相同输入的输出 由于AI答题有各种各样答案&#xff0c;因此现在是利用选择题考察。 有一个知名的选择题的基准叫做Massive Multitask Language Und…...

解构区块链身份认证:从ID到零知识证明的实战指南

引言 在数字经济高速发展的今天&#xff0c;数字身份已成为个人与数字世界交互的核心凭证。传统中心化身份系统存在数据孤岛、隐私泄露、单点故障等痛点&#xff0c;而区块链技术凭借​​去中心化、不可篡改、可追溯​​的特性&#xff0c;为数字身份验证提供了革命性解决方案…...

IntelliJ IDEA 使用教程

文章目录 一、创建项目二、创建模块三、创建包四、创建类五、编写代码六、运行代码注意 一、创建项目 二、创建模块 【File】->【New】->【Module…】 三、创建包 【helloword】->【右击 src】->【New】->【Package】 四、创建类 【helloword】->【s…...

HBM的哪些事

命令操作 这也许是DDR往HBM演进的一些奇淫技巧。 本篇内容属于杂谈&#xff0c;关于HBM的奇淫技巧&#xff0c;随后出专题介绍。...

C++ std::initializer_list 详解

std::initializer_list 是 C11 引入的一个轻量级模板类&#xff0c;用于支持花括号初始化列表&#xff08;{1, 2, 3}&#xff09;的语义。它允许函数或构造函数接受任意长度的同类型初始化列表&#xff0c;是实现统一初始化&#xff08;{} 语法&#xff09;的核心组件。 1. 基本…...

网络原理 - 13(HTTP/HTTPS - 4 - HTTPS)

目录 HTTPS 是什么 不得不的策略 - 应对“运营商劫持” “加密” 是什么 分类 对称加密 非对称加密 HTTPS 工作原理 1&#xff09;引入对称加密 2&#xff09; 引入非对称加密 中间人攻击 引入证书 证书的验证过程 完&#xff01; HTTPS 是什么 HTTPS 也是一个应…...

当MCP撞进云宇宙:多芯片封装如何重构云计算的“芯“未来?

当MCP撞进云宇宙:多芯片封装如何重构云计算的"芯"未来? 2024年3月,AMD发布了震撼业界的MI300A/B芯片——这颗为AI计算而生的"超级芯片",首次在单封装内集成了13个计算芯片(包括3D V-Cache缓存、CDNA3 GPU和Zen4 CPU),用多芯片封装(Multi-Chip Pac…...

Kotlin Flow流

一 Kotlin Flow 中的 stateIn 和 shareIn 一、简单比喻理解 想象一个水龙头&#xff08;数据源&#xff09;和几个水杯&#xff08;数据接收者&#xff09;&#xff1a; 普通 Flow&#xff08;冷流&#xff09;&#xff1a;每个水杯来接水时&#xff0c;都要重新打开水龙头从…...

虚拟局域网(VLAN)实验(Cisco Packet Tracer)-路由器、交换机的基本配置

好的&#xff0c;我们来根据你提供的文档&#xff0c;一步步地在 Cisco Packet Tracer 中完成这个跨交换机划分 VLAN 的实验。 实验目标: 配置两台交换机 SW1 和 SW2&#xff0c;划分 VLAN 10 和 VLAN 20&#xff0c;配置 Trunk 链路&#xff0c;并测试同 VLAN 和跨 VLAN 的连…...

【论文速递】2025年09周 (Robotics/Embodied AI/LLM)

目录 LLM-Microscope&#xff1a;揭示标点符号在Transformers的上下文中的隐藏作用英文摘要中文摘要 SurveyX&#xff1a;通过大型语言模型实现学术调查自动化英文摘要中文摘要 数学推理的自我奖励校正英文摘要中文摘要 VideoGrain&#xff1a;调整时空关注以进行多元透明视频编…...

自主机器人模拟系统

一、系统概述 本代码实现了一个基于Pygame的2D自主机器人模拟系统&#xff0c;具备以下核心功能&#xff1a; 双模式控制&#xff1a;支持手动控制&#xff08;WASD键&#xff09;和自动导航模式&#xff08;鼠标左键设定目标&#xff09; 智能路径规划&#xff1a;采用改进型…...

DeepSeek构建非农预测模型:量化关税滞后效应与非线性经济冲击传导

AI分析&#xff1a;非农数据前瞻与关税影响的滞后性 根据AI模型对多维度经济指标的交叉验证&#xff0c;4月非农就业报告或呈现“增速放缓但未失速”的特征。当前市场共识预期为新增就业13.3万人&#xff08;前值22.8万&#xff09;&#xff0c;失业率维持4.2%&#xff0c;时薪…...

前端面经-VUE3篇--vue3基础知识(一)插值表达式、ref、reactive

一、计算属性(computed) 计算属性&#xff08;Computed Properties&#xff09;是 Vue 中一种特殊的响应式数据&#xff0c;它能基于已有的响应式数据动态计算出新的数据。 计算属性有以下特性&#xff1a; 自动缓存&#xff1a;只有当它依赖的响应式数据发生变化时&#xff…...

云原生后端架构的优势与最佳实践

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 在过去的几年里,随着云计算和容器化技术的迅猛发展,云原生架构逐渐成为现代企业和开发团队构建和运维应用系统的首选方式。云原生架构通过高度的自动化、弹性伸缩、微服务化等特点,使得企业能够在不断变化…...

力扣838.推多米诺随笔

“生活就像海洋&#xff0c;只有意志坚强的人&#xff0c;才能到达彼岸。”—— 马克思 题目 n 张多米诺骨牌排成一行&#xff0c;将每张多米诺骨牌垂直竖立。在开始时&#xff0c;同时把一些多米诺骨牌向左或向右推。 每过一秒&#xff0c;倒向左边的多米诺骨牌会推动其左侧…...

aab转apk

一、 android34升级&#xff1a; 1、升级到安卓34&#xff08;蓝牙、图片&#xff09; 再蓝牙广播的地方加入Context.RECEIVER_EXPORTED 2、废弃了 BluetoothAdapter#enable() 和 BluetoothAdapter#disable()&#xff0c;需要修改 // 以前的蓝牙操作BluetoothManager bluetoo…...