文章目录
Rust 入门:关联类型与默认泛型类型参数
Rust 里,泛型(Generic)让代码更灵活,但有时写起来会很复杂。为此,Rust 提供了关联类型和默认泛型类型参数,帮助简化代码,让接口设计更优雅。
一、关联类型(Associated Types)
关联类型是特质(trait)里定义的一个类型占位符,由实现该特质的类型具体指定。
举例说明
假设定义一个“容器”特质,表示这个类型可以存放某种元素:
trait Container {
type Item; // 关联类型,具体类型由实现者确定
fn add(&mut self, item: Self::Item);
fn remove(&mut self) -> Option<Self::Item>;
}
这里 Item
就是关联类型,意思是“容器里装的东西是什么类型”。
实现例子
struct IntStack {
items: Vec<i32>,
}
impl Container for IntStack {
type Item = i32; // 指定关联类型为 i32
fn add(&mut self, item: i32) {
self.items.push(item);
}
fn remove(&mut self) -> Option<i32> {
self.items.pop()
}
}
这样写,调用者不用每次都告诉容器元素类型是什么,因为它已经和类型绑定了。
二、默认泛型类型参数(Default Generic Type Parameters)
有时候,泛型参数有个“默认值”,调用者可以选择写或者不写。
举例
struct Point<T = i32> {
x: T,
y: T,
}
fn main() {
let p1 = Point { x: 10, y: 20 }; // 使用默认类型 i32
let p2 = Point::<f64> { x: 1.1, y: 2.2 }; // 显式指定 f64
}
这里 Point
的泛型类型参数 T
默认是 i32
,如果不写,默认就是 i32
。
三、结合使用例子
关联类型和默认泛型参数常用在设计灵活又易用的特质和结构体上。
四、小结
特性 | 作用 | 示例场景 |
---|---|---|
关联类型(Associated Types) | 在特质中定义一个类型占位符,由实现者指定具体类型 | 容器元素类型、迭代器输出类型 |
默认泛型类型参数(Default Generic Parameters) | 泛型参数有默认类型,调用时可省略 | 结构体、函数参数默认类型简化调用 |
理解这两个特性后,你可以写出更简洁、清晰、易扩展的 Rust 代码。