Rust 標準庫 Trait 速查
Rust 的 trait 實在太重要太豐富了…有時想不起來還不容易查…
資料結構特性
std::marker::Sized:用於資料結構泛型 (S<T>),表示編譯期可以確定大小!Sized表示編譯期無法確定大小?Sized表示編譯期能不能確定大小都無所謂std::marker::Copy:表示可以直接複製記憶體來複製資料結構
在資料結構前面加上#[derive(Copy)]來自動實現
實現此特性就可以用#[derive(Copy, Clone)]一併實現std::clone::Clonestd::marker::Sync:表示支援跨線程可變借用,結構已經解決了跨線程同步問題
通常編譯器會在支援時自動實現std::marker::Send:表示可以將結構轉移給其他線程
通常編譯器會在支援時自動實現
比較
std::cmp::PartialEq:實現相同型態之間的==比較方法
包含的型態都實現了PartialEq的場合,可以用#[derive(PartialEq)]自動實現std::cmp::Eq:標示此型態的==比較方法在資料上是完全相等,而非符合特定條件就相等
比如NaN != NaN就不符合此特性
結構包含的型態都實現了Eq的場合,可以用#[derive(Eq)]自動實現std::cmp::PartialOrd:實現相同型態之間的排序,也實現了>,>=,<,<=比較方法
結構包含的型態都實現了的場合,可以用PartialOrd#[derive(自動實現PartialOrd)]
運算子
std::ops::* 裡面就講得很明白了
型態轉換
std::convert::From<T>:實現從型態 T 轉換成自身型態
實現Self::from(t)方法
會自動實現std::convert::Into<T>,因此建議優先實現此 traitstd::convert::Into<T>:實現從自身型態轉換成型態 T
實現self.into()方法std::convert::TryFrom<T>:實現從型態 T 轉換成自身型態,且支援轉換出錯
實現Self::try_from(t)方法
會自動實現std::convert::,因此建議優先實現此型態TryInto<T>std::convert:::實現從自身型態轉換成型態 T,且支援轉換出錯TryInto<T>
實現self.try_into()方法std::convert::AsRef<T>:實現將自身型態以型態 T 的方式只讀借用
建議用在輕量的轉型
比如將std::path::Path當成&str來借用std::convert::AsMut<T>:實現將自身型態以型態 T 的方式可變借用
建議用在輕量的轉型
比如將std::string::String 當成&str來借用std::iter::FromIterator:實現以迭代器資料建立自身資料
這也實現了iter.collect()方法std::iter::IntoIterator:實現將自身轉換為迭代器
實現self.into_iter()方法
迭代器
std::iter::Iterator:表示結構可作為迭代器使用std::iter::ExactSizeIterator:表示迭代器有明確的長度,而非範圍或無限std::iter::DoubleEndedIterator:表示迭代器支援從結尾往開頭迭代
也表示支援反轉順序,實現iter.rev()方法std::iter::FusedIterator:表示迭代器在回傳None之後就不會再有新資料 (Some(_))
文字
std::fmt::Debug:同std::fmt::Display,但是面向開發std::fmt::Display:實現將自身輸出成文字並格式化
會自動實現std::string::ToString,文件建議優先實現此 traitstd::string::ToString:實現從自身型態轉換成String
其他
std::hash::Hash:實現結構自身的 Hash,通常用在HashMap的 Key 或HashSet的 Value
這個特性不用來實現 SHA 之類的 Hash
結構包含的型態都實現了的場合,可以用Hash#[derive(自動實現)]Hashstd::default::Default:實現預設值
結構包含的型態都實現了的場合,可以用Default#[derive(自動實現Default)]
Leave a Comment