學習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
- html學習(常用屬性)HTML
- Rust宏之derive的設計及實戰Rust
- Rust 屬性是什麼?Rust
- CALayer學習--contentsCenter屬性
- Redis學習 - 配置屬性:bindRedis
- iOS 屬性學習筆記iOS筆記
- Android學習之 屬性動畫Android動畫
- Hive學習之常見屬性配置Hive
- (JavaScript學習記錄):jQuery 屬性操作JavaScriptjQuery
- Hive學習之更改表的屬性Hive
- Redis學習 - 配置屬性:protected-modeRedis
- Java學習之類的屬性(轉)Java
- React學習手記2-屬性校驗和預設屬性React
- Rust 通過屬性禁用 lint 警告Rust
- Rust 透過屬性禁用 lint 警告Rust
- 學習Sass 巢狀規則與屬性巢狀
- Vue學習筆記(六):監視屬性Vue筆記
- CSS學習——關於連結的屬性CSS
- WPF依賴屬性的正確學習方法
- 學習CSS的background屬性及其取值(實踐)CSS
- JavaScript中的物件學習筆記(屬性操作)JavaScript物件筆記
- Vue學習之理解計算屬性computedVue
- iOS類新增方法、屬性學習筆記iOS筆記
- HTML5 學習筆記 表單屬性HTML筆記
- 前端學習-vue影片學習007-標籤的ref屬性前端Vue
- 學習Rust 函式Rust函式
- 學習Rust 迴圈Rust
- Rust 學習筆記Rust筆記
- yangwenmai/learning-rust: Rust 學習之路AIRust
- Python學習之路38-動態建立屬性Python
- 輕鬆學習 JavaScript(7):物件屬性描述符JavaScript物件
- C#學習筆記-欄位、屬性、索引器C#筆記索引
- 學習Rust 物件導向Rust物件
- 學習Rust 集合與字串Rust字串
- 學習Rust 結構體Rust結構體
- rust 學習記錄(一)Rust