跳至主要內容

泛型

ColorSky小于 1 分钟笔记Rust

泛型是个啥

  • 泛型是具体类型或者其他属性的抽象代替
    • 你编写的代码不是最终代码,而是一种模板,里边有一些占位符
    • 编译器在编译时将占位符替换为具体的类型

函数定义中的泛型

泛型函数

  • 参数类型
  • 返回类型
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,
        }
    }
}