學習Rust:派生derive屬性
當你有很多trait(介面)實現型別時,它很快就會變得乏味,並且可能會給你的程式碼增加很多複雜性。
struct Point { x: u64, y: u64, } impl Debug for Point { // ... } impl Display for Point { // ... } impl Something for Point { // ... } impl SomethingElse for Point { // ... } // ... |
幸運的是,Rust 為我們提供了一些東西:derive 屬性。
透過使用該derive屬性,我們實際上將我們的型別提供給一個Derive 宏,它是一種過程宏。
他們將程式碼作為輸入(在本例中為我們的型別),並在編譯時建立更多程式碼作為輸出。
這對於資料反序列化特別有用:只需實現 crate 中的 Serialize和Deserialize特徵,我們就可以將我們的型別序列化和反序列化為許多資料格式:JSON、YAML、TOML , BSON等等...
use serde::{Serialize, Deserialize}; #[derive(Debug, Clone, Serialize, Deserialize)] struct Point { x: u64, y: u64, } |
不費吹灰之力,我們就為我們的結構Point實現了Debug、Clone、Serialize和Deserialize的trait。
需要注意的是,您的結構的所有子欄位都需要實現這些trait。
use serde::{Serialize, Deserialize}; // 你不能這麼做 #[derive(Debug, Clone, Serialize, Deserialize)] struct Point<T> { x: T, y: T, } // 你需要這麼做: use serde::{Serialize, Deserialize}; use core::fmt::Debug; // Import the Debug trait #[derive(Debug, Clone, Serialize, Deserialize)] struct Point<T: Debug + Clone + Serialize + Deserialize> { x: T, y: T, } |
相關文章
- Rust中的derive屬性詳解Rust
- Rust 屬性介紹Rust
- CALayer學習--contentsCenter屬性
- Rust 屬性是什麼?Rust
- Rust宏之derive的設計及實戰Rust
- Rust 通過屬性禁用 lint 警告Rust
- Rust 透過屬性禁用 lint 警告Rust
- React學習手記2-屬性校驗和預設屬性React
- (JavaScript學習記錄):jQuery 屬性操作JavaScriptjQuery
- Hive學習之常見屬性配置Hive
- Vue學習筆記(六):監視屬性Vue筆記
- 學習Sass 巢狀規則與屬性巢狀
- 前端學習-vue影片學習007-標籤的ref屬性前端Vue
- WPF依賴屬性的正確學習方法
- 學習CSS的background屬性及其取值(實踐)CSS
- Python學習之路38-動態建立屬性Python
- JavaScript中的物件學習筆記(屬性操作)JavaScript物件筆記
- yangwenmai/learning-rust: Rust 學習之路AIRust
- C#學習筆記-欄位、屬性、索引器C#筆記索引
- Rust 學習筆記Rust筆記
- 學習Rust 函式Rust函式
- 學習Rust 迴圈Rust
- Vue原始碼學習(十七):實現computed計算屬性Vue原始碼
- PHP 手冊 (類與物件) 學習筆記二:屬性PHP物件筆記
- 通過describe命令學習Kubernetes的pod屬性詳解
- Vue.js入門學習 -- 計算屬性Computed( 十一)Vue.js
- vue原始碼學習:Object.defineProperty 物件屬性監聽Vue原始碼Object物件
- rust學習十二、測試Rust
- rust學習七、列舉Rust
- Rust 語言學習之旅Rust
- 一起學習RustRust
- rust 學習記錄(一)Rust
- 學習Rust 結構體Rust結構體
- 學習Rust 物件導向Rust物件
- 學習Rust 集合與字串Rust字串
- CMake 屬性之全域性屬性
- Vue模板語法、屬性繫結、條件渲染的學習Vue
- 鄧洋前端學習——Flex佈局之flex-basis屬性前端Flex