在特徵上放置一個邊界
在定義新特徵時,可以強制希望實現此特徵的型別驗證許多約束或邊界。
以標準庫為例, DerefMut
特性要求型別首先實現其兄弟 Deref
特徵:
pub trait DerefMut: Deref {
fn deref_mut(&mut self) -> &mut Self::Target;
}
反過來,這使得 DerefMut
能夠使用由 Deref
定義的相關型別 Target
。
雖然語法可能讓人聯想到繼承:
- 它引入了繫結特徵的所有相關項(常量,型別,函式……)
- 它實現了從
&DerefMut
到&Deref
的多型性
這在本質上是不同的:
- 可以使用生命週期(例如
'static
)作為約束 - 不可能覆蓋繫結的特徵項(甚至不是函式)
因此,最好將其視為一個單獨的概念。