泛型的概念
泛型是一种具体类型或者是其他属性的抽象的一种代替:
- 你编写的泛型代码不是最终的代码,而是一种模板,里面有一些占位符(泛型)
- 编译器在编译时会将占位符替换为具体的类型
泛型的应用
函数中的泛型
fn largest<T>(list:&[T]) -> T {
// ...
}
这段代码上面的T就是占位符,用来代表某一种类型,在编译时会将这个类型最终确定
结构体中的泛型
struct Test<T> {
x: T,
y: T,
}
枚举中的泛型
枚举中的泛型,仅针对枚举中的变体
enum Test2<T> {
name(T),
}
// Option就是为了代替null而出现的
enum Option<T>{
Some(T),
None,
}
enum Result<T,E>{
Ok(T),
Err(E),
}
方法(impl)中的枚举
struct Test<T> {
x: T,
y: T,
}
// impl关键字后面声明是针对泛型结构体的方法
impl<T> Test<T> {
fn x(&self) -> &T {
&self.x
}
}
// 如果是根据具体类型初始化方法,impl后就不要跟泛型类型
impl Test<i32>{
...
}
注意: 我们第一个针对泛型方法定义的方法,所有类型上都存在这个方法。 而第二个,只存在于i32类型的Test身上