在 Rust 中,derive
關鍵字用于自動實現一些常見的數據結構操作,如序列化、反序列化、相等性比較等。當你需要為復雜數據類型實現這些操作時,可以使用 derive
宏。
以下是一些常見的復雜數據類型及其對應的 derive
宏:
Serialize
和 Deserialize
宏,它們分別來自 serde
庫。use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
age: u32,
}
PartialEq
和 Eq
宏。use std::cmp::PartialEq;
#[derive(PartialEq, Eq)]
struct Point {
x: i32,
y: i32,
}
Hash
宏。use std::hash::{Hash, Hasher};
#[derive(Hash)]
struct Person {
name: String,
age: u32,
}
Default
宏。#[derive(Default)]
struct Person {
name: String,
age: u32,
}
Iterator
和 FromIterator
宏。use std::iter::FromIterator;
#[derive(FromIterator)]
struct Point {
x: i32,
y: i32,
}
Display
宏。#[derive(Display)]
struct Point {
x: i32,
y: i32,
}
當處理復雜數據類型時,你可能需要為結構體實現多個特性。在這種情況下,你可以使用多個 derive
宏,例如:
use serde::{Serialize, Deserialize};
use std::cmp::PartialEq;
use std::hash::{Hash, Hasher};
#[derive(Serialize, Deserialize, PartialEq, Eq, Hash, Default)]
struct Person {
name: String,
age: u32,
}
請注意,derive
宏只能為結構體和枚舉類型實現特性。如果你需要為其他復雜數據類型實現特性,你可能需要手動編寫實現代碼。