發表文章

精選文章

[Rust] Trait 設計模式元素拆解與組合規則

文章目錄 01 設計的三個維度 02 選型決策樹 03 方案比較 04 派發與所有權 05 契約與組合 06 API 與呼叫語意 07 設計落地與檢核 08 官方參考資料 跳到 11 個完整範例 01 泛型與 impl Trait 02 dyn Trait 03 enum 與 match 04 借用與生命週期 05 關聯型別 06 關聯函式 07 關聯常數 08 Supertraits 與預設方法 09 From / TryFrom 10 運算子多載 11 完全限定語法 01 / MENTAL MODEL 先分開三個設計維度 Trait 定義可被實作的契約。泛型、trait object、關聯型別與轉換 trait 解決的是不同問題;它們可以組合,不是 11 個互斥選項。若只有一種實作,也沒有替換或測試隔離需求,先使用具體型別與 inherent impl 即可。 ① 行為如何選擇? T: Trait 保留具體型別; dyn Trait 擦除具體型別; enum + match 在已知變體間選擇行為。 ② 資料由誰持有? T 持有值、 &T 借用值、 Box<T> 持有配置於堆積的值。所有權與派發方式分開決定。 ③ 介面承諾什麼? 用關聯型別描述輸出、用 supertraits 表達能力需求,再用建構、轉換與運算子設計呼叫語意。 效能用具體成本描述。 靜態派發不需要 trait object 的虛擬呼叫,但不代表函式內部沒有配置、複製或運算。動態派發可能限制內聯,最佳化器也可能消除間接呼叫;不要保證固定指令數或宣稱某方案永遠較快。 機制依據: 泛型與單態化 、 Trait objects 。 02 / DECISION TREES 先選派發,再選所有權 執行時才知道要使用哪個值,不等於一...