泛型的概念
泛型是一种具体类型或者是其他属性的抽象的一种代替:
- 你编写的泛型代码不是最终的代码,而是一种模板,里面有一些占位符(泛型)
- 编译器在编译时会将占位符替换为具体的类型
泛型的应用
函数中的泛型
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身上
