【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 的實現工作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/78145.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/78145.shtml
英文地址,請注明出處:http://en.pswp.cn/web/78145.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網站備份,網站數據備份的步驟

網站備份(尤其是網站數據備份)是保障業務連續性、防止數據丟失和應對安全威脅的關鍵措施。以下是系統化的備份步驟和實施建議,涵蓋技術操作、策略規劃及常見問題處理: 一、備份前的準備工作 明確備份范圍 核心數據:…

OpenCV 圖形API(72)圖像與通道拼接函數-----根據指定的方式翻轉圖像(GMat)函數 flip()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 翻轉一個2D矩陣,圍繞垂直軸、水平軸或同時圍繞兩個軸。 該函數以三種不同的方式之一翻轉矩陣(行和列的索引是從0開始的&a…

醫生視角下轉錄組學的生物信息學分析

醫生視角下轉錄組學的生物信息學分析 轉錄組學的生物信息學分析是醫生解決臨床與科研問題的有力工具。這里羅列醫學轉錄組學相關的幾個概念,從使用者(醫生)的角度看待理解相關技術,為后續使用該技術說明臨床和科研問題奠定基礎。…

量子機器學習中的GPU加速實踐:基于CUDA Quantum的混合編程模型探索

引言:量子機器學習的新范式 在量子計算與經典機器學習交叉融合的前沿領域,量子機器學習(Quantum Machine Learning, QML)正經歷著革命性突破。然而,隨著量子比特規模的增長和算法復雜度的提升,傳統計算架構…

Matplotlib核心課程-2

4.1 數據加載、儲存 4.1.1 從數據文件讀取數據 導入支持庫: import numpy as np from pandas import Series,DataFrame import pandas as pd 從csv文件讀取數據,一般方法: pd.read_csv(../data/ex1.csv,encodinggbk) 從csv文件讀取數據&#…

new和malloc的區別

1 語義層級不同:語言機制 vs. 庫函數 new / new[] (C 關鍵字)malloc / calloc / realloc (C 運行時函數)本質語言級運算符;可被重載庫函數;無法重載作用分配內存 并調用構造函數僅分配原始字節塊,不做初始化,也不調用…

C++11新特性_自動類型推導_auto

在 C11 標準中,auto關鍵字被賦予了全新且強大的功能,它用于自動類型推導,即編譯器能夠根據變量的初始化表達式自動確定其類型。 基本語法 使用auto聲明變量時,只需給出auto關鍵字,后面緊跟變量名,并對其進…

[預備知識]6. 優化理論(二)

優化理論 本章節介紹深度學習中的高級優化技術,包括學習率衰減、梯度裁剪和批量歸一化。這些技術能夠顯著提升模型的訓練效果和穩定性。 學習率衰減(Learning Rate Decay) 數學原理與可視化 學習率衰減策略的數學表達: 步進式…

【計算機視覺】語義分割:Mask2Former:統一分割框架的技術突破與實戰指南

深度解析Mask2Former:統一分割框架的技術突破與實戰指南 技術架構與創新設計核心設計理念關鍵技術組件 環境配置與安裝指南硬件要求安裝步驟預訓練模型下載 實戰全流程解析1. 數據準備2. 配置文件定制3. 訓練流程4. 推理與可視化 核心技術深度解析1. 掩膜注意力機制…

數字智慧方案5857丨智慧機場解決方案與應用(53頁PPT)(文末有下載方式)

資料解讀:智慧機場解決方案與應用 詳細資料請看本解讀文章的最后內容。 隨著科技的飛速發展,智慧機場的建設已成為現代機場發展的重要方向。智慧機場不僅提升了旅客的出行體驗,還極大地提高了機場的運營效率。本文將詳細解讀沃土數字平臺在…

【C到Java的深度躍遷:從指針到對象,從過程到生態】第五模塊·生態征服篇 —— 第二十章 項目實戰:從C系統到Java架構的蛻變

一、跨語言重構:用Java重寫Redis核心模塊 1.1 Redis的C語言基因解析 Redis 6.0源碼核心結構: // redis.h typedef struct redisObject { unsigned type:4; // 數據類型(String/List等) unsigned encoding:4; // …

ES6異步編程中Promise與Proxy對象

Promise 對象 Promise對象用于解決Javascript中的地獄回調問題,有效的減少了程序回調的嵌套調用。 創建 如果要創建一個Promise對象,最簡單的方法就是直接new一個。但是,如果深入學習,會發現使用Promise下的靜態方法Promise.re…

UE自動索敵插件Target System Component

https://www.fab.com/zh-cn/listings/9088334d-3bde-4e10-a937-baeb780f880f ? 一個完全用 C 編寫的 UE插件,添加了對簡單相機鎖定/瞄準系統的支持。它最初??在藍圖中開發和測試,然后轉換并重寫為 C 模塊和插件。 特征: 可通過一組可在…

中小企業MES系統概要設計

版本:V1.0 日期:2025年5月2日 一、系統架構設計 1.1 整體架構模式 采用分層微服務架構,實現模塊解耦與靈活擴展,支持混合云部署: #mermaid-svg-drxS3XaKEg8H8rAJ {font-family:"trebuchet ms",verdana,ari…

STM32移植U8G2

STM32 移植 U8G2 u8g2 (Universal 8bit Graphics Library version2 的縮寫)是用于嵌入式設備的單色圖形庫,可以在單色屏幕中繪制 GUI。u8g2 內部附帶了例如 SSD13xx,ST7xx 等很多 OLED,LCD 驅動。內置多種不同大小和風…

Langchain,為何要名為langchian?

來聽聽 DeepSeek 怎么說 Human 2025-05-02T01:13:43.627Z langchain 是一個大語言模型開發框架。我的理解中,lang 是詞根"語言",chain是單詞"鏈",langchain 便是將語言模型和組件串聯成鏈的框架。而 langchain 的圖標是…

Windows下Python3腳本傳到Linux下./example.py執行失敗

1. 背景 大多數情況下通過pycharm編寫Python代碼,編寫調試完,到Linux下發布執行。 以example.py腳本為例 #! /usr/bin/env python3 #! -*- encoding: utf-8 -*- def test(x,y): xint x yint y cxy return c if _name_"__main__": print(test(2…

當MCP撞進云宇宙:多芯片封裝如何重構云計算的“芯“未來?

當MCP撞進云宇宙:多芯片封裝如何重構云計算的"芯"未來? 2024年3月,AMD發布了震撼業界的MI300A/B芯片——這顆為AI計算而生的"超級芯片",首次在單封裝內集成了13個計算芯片(包括3D V-Cache緩存、CDNA3 GPU和Zen4 CPU),用多芯片封裝(Multi-Chip Pac…

用定時器做微妙延時注意事項

注意定時器來著APB1還是APB2,二者頻率不一樣,配置PSC要注意 (1)高級定時器timer1, timer8以及通用定時器timer9, timer10, timer11的時鐘來源是APB2總線 (2)通用定時器ti…

三類思維坐標空間與時空序位信息處理架構

三類思維坐標空間與時空序位信息處理架構 一、靜態信息元子與元組的數據結構設計 三維思維坐標空間定義 形象思維軸(x):存儲多媒體數據元子(圖像/音頻/視頻片段) 元子結構:{ID, 數據塊, 特征向量, 語義…