泛型
小于 1 分钟
泛型是个啥
- 泛型是具体类型或者其他属性的抽象代替
- 你编写的代码不是最终代码,而是一种
模板
,里边有一些占位符
- 编译器在
编译时
将占位符替换为具体的类型
- 你编写的代码不是最终代码,而是一种
函数定义中的泛型
泛型函数
- 参数类型
- 返回类型
fn example<T>(value: &[T]) -> T {/*--snip--*/}
Struct 定义中的泛型
struct Point<T> {
x: T,
y: T,
}
此时,x 和 y 都是 T 类型,如果想要不同的类型,可以定义 2 个类型
struct Point<T, U> {
x: T,
y: U,
}
枚举定义中的泛型
enum Option<T> {
Some(T),
None,
//变体可以不持有泛型
}
方法定义中的泛型
在方法定义中使用泛型需要在impl
后边加上<T>
,把 T 放在impl
关键字后边表示在类型 T 上实现该方法
struct Point<T>{
x: T,
y: T,
}
impl<T> Point<T> {
fn x(&self) -> &T{
&self.x
}
}
Struct 里的泛型参数可以不同于方法的类型参数
struct Point<T, U> {
x: T,
y: U,
}
impl<T, U> Point<T, U> {
fn mixuo<V, W>(self, other: Point<V, W>) -> Point<T, W> {
Point {
x: self.x,
y: other.y,
}
}
}