Rust 標準庫 Trait 速查

Rust 的 trait 實在太重要太豐富了…有時想不起來還不容易查…

資料結構特性

  • std::marker::Sized :用於資料結構泛型 ( S<T> ),表示編譯期可以確定大小
    !Sized 表示編譯期無法確定大小
    ?Sized 表示編譯期能不能確定大小都無所謂
  • std::marker::Copy :表示可以直接複製記憶體來複製資料結構
    在資料結構前面加上 #[derive(Copy)] 來自動實現
    實現此特性就可以用 #[derive(Copy, Clone)] 一併實現 std::clone::Clone
  • std::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>,因此建議優先實現此 trait
  • std::convert::Into<T> :實現從自身型態轉換成型態 T
    實現 self.into() 方法
  • std::convert::TryFrom<T> :實現從型態 T 轉換成自身型態,且支援轉換出錯
    實現 Self::try_from(t) 方法
    會自動實現 std::convert::TryInto<T>,因此建議優先實現此型態
  • std::convert::TryInto<T> :實現從自身型態轉換成型態 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 ,文件建議優先實現此 trait
  • std::string::ToString :實現從自身型態轉換成 String

其他

  • std::hash::Hash :實現結構自身的 Hash,通常用在 HashMap 的 Key 或 HashSet 的 Value
    這個特性不用來實現 SHA 之類的 Hash
    結構包含的型態都實現了 Hash 的場合,可以用 #[derive(Hash)] 自動實現
  • std::default::Default :實現預設值
    結構包含的型態都實現了 Default 的場合,可以用 #[derive(Default)] 自動實現

Related posts

Shell 語法筆記

從多個 pipeline 輸入資料

# 以 diff 示範
diff <(ls dir1) <(ls dir2)

慣用 vim 設定檔

Tab 縮排

set tabstop=4
set shiftwidth=4
" 避免把 tab 變成 space
set noexpandtab

自動縮排

set ai!
set smartindent

自定義界面

" 顯示行號
set nu
" 高亮搜尋結果
set...

MacOS VPN 路由設定

使用 root 權限新增腳本 /etc/ppp/ip-up ,記得 chmod +x:

#!/bin/bash
# 參數說明參考:https://superuser.com/questions/4904
# $1 是VPN 使用的介面名稱,比如 ppp0
# $2 沒查到
#...

反人性 SQL 速查

存在則取得 ID,否則插入

-- 假設 `pk` 是 Primary Key, `column2` 是 Unique Key
INSERT INTO `table`...

好用 bash 設定

SSH 一次性 IP

alias tssh='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" '
alias tscp='scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null"...

指令速查 – 文字處理

複製貼上

移除 # 註解:sed -e '/^*#/d'取得當前腳本所在目錄:參考:https://stackoverflow.com/questions/59895/

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE}" )" &> /dev/null &&...

Leave a Comment

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *