【06】泛型
文章目录
- 泛型
- 函数中的泛型
- 结构体中的泛型
- 结构体中的方法
- 枚举中的泛型
泛型
RUST通过在编译时对泛型代码的单态化(monomorphization)来保证运行效率。即,在编译时对泛型填充具体数据类型转换为特定代码进行编译。
由于RUST编译试图穷举所有类型,所以代码需要支持所有类型才可以编译。或者限制为指定几个类型。<T>
中的T
指定任一数据类型。
函数中的泛型
fn fun1<T>(list: &[T]) -> &T {}
结构体中的泛型
struct Point<T> {
x: T,
y: T,
}
struct Point<T, U> {
x: T,
y: U,
}
结构体中的方法
struct Point<T> {
x: T,
y: T,
}
// impl<T> 里面指定的泛型T
impl<T> Point<T> {
fn x(&self) -> &T {
&self.x
}
}
可以为实例实现方法,也就是单个数据类型
impl Point<f32>{
fn distance_from_origin(&self) -> f32 {
(self.x.powi(2) + self.y.powi(2)).sqrt()
}
}
impl<>
中定义的方法也使用与impl<>
不同的数据类型。
struct Point<X1, Y1> {
x: X1,
y: Y1,
}
impl<X1, Y1> Point<X1, Y1> {
fn mixup<X2, Y2>(self, other: Point<X2, Y2>) -> Point<X1, Y2> {
Point {
x: self.x,
y: other.y,
}
}
}
枚举中的泛型
// 用于处理空的Option
enum Option<T>{
Some(T),
None,
}
// 用于处理错误的Result
enum Result<T,E>{
Ok(T),
Err(E),
}