在特征上放置一个边界
在定义新特征时,可以强制希望实现此特征的类型验证许多约束或边界。
以标准库为例, DerefMut
特性要求类型首先实现其兄弟 Deref
特征:
pub trait DerefMut: Deref {
fn deref_mut(&mut self) -> &mut Self::Target;
}
反过来,这使得 DerefMut
能够使用由 Deref
定义的相关类型 Target
。
虽然语法可能让人联想到继承:
- 它引入了绑定特征的所有相关项(常量,类型,函数……)
- 它实现了从
&DerefMut
到&Deref
的多态性
这在本质上是不同的:
- 可以使用生命周期(例如
'static
)作为约束 - 不可能覆盖绑定的特征项(甚至不是函数)
因此,最好将其视为一个单独的概念。