前言
本文囊括 Rust 中泛型的主要知识点。
泛型的一般形式
|
|
泛型参数约束
Rust 中有两种方法给泛型参数添加约束:
第一种通过冒号指定:
|
|
第二种使用 where 子句指定:
|
|
一般简单约束可以用冒号,复杂的用 where 子句。我们可以理解冒号用法都能转换成 where 子句,反之并不能。
|
|
类似上例这种就无法用冒号代替。
关联类型
trait 中不仅可以包含方法和常量,还可以包含类型。这种类型叫做关联类型。
|
|
一个使用它的经典场景就是在泛型中约束特定元素的迭代器:
|
|
关联类型和普通的泛型参数在功能上有重叠,一般在选择时主要关注类型是否需要这个 trait 多次,例如 AsRef 我们就可以实现多次,因为我们可以 AsRef 成不同的类型。
而像 Deref 这种肯定更希望只实现一次,这时就可以考虑关联类型。
泛型特化
特化的三个意义:
- 性能优化:针对统一抽象的特殊场景做特殊处理
- 代码重用:提供默认实现,有时能减少代码
- 作为 trait 系统“高效继承”的基础
具体的以后单开再聊。