Rust 中的泛型与特性:代码复用与多态的利器
1. 泛型编程概述
从高级编程语言诞生之初,语言设计者就一直在追求更好的抽象,以实现代码复用。最初的代码复用方式是函数,函数能将一系列指令封装在一个命名实体中,可多次调用,还能接受参数,降低代码复杂度并提高可读性。
然而,函数的复用能力有限。例如,若有一个计算整数列表平均值的 avg 函数,当需要计算浮点数列表的平均值时,通常要创建一个新函数。若还要处理双精度浮点数列表,又得再写一个函数。这种仅因参数类型不同而重复编写函数的做法,浪费了程序员的时间。
为减少这种重复,泛型编程的概念应运而生。泛型编程允许编写能接受多种类型的代码,如泛型函数。泛型编程仅适用于静态类型编程语言,最早出现在 ML 语言中。动态语言(如 Python)使用鸭子类型,API 根据参数的行为而非类型来处理,因此不依赖泛型。泛型是语言设计的一部分,有助于实现代码复用和“不要重复自己”(DRY)原则。
2. 泛型类型与单态化
使用泛型编程技术,可编写带有类型占位符的算法、函数、方法和类型,并指定类型变量(通常用单个字母,如 T、K 或 V)。编译器会在代码实例化时填充实际类型,这些类型称为泛型类型或项。类型上的单个字母符号(如 T)称为泛型类型参数,使用或实例化泛型项时,它们会被具体类型(如 u32)替代。
每次使用具体类型实例化泛型项时,编译器会生成该代码的专用副本,将类型变量 T 替换为具体类型,这个过程称为单态化,与多态函数相反。
以 Rust 标准库中的 Vec<T> 类型为例,其定义如下:
超级会员免费看
订阅专栏 解锁全文
769

被折叠的 条评论
为什么被折叠?



