rust笔记12:rust的泛型

发布于:2025-03-07 ⋅ 阅读:(141) ⋅ 点赞:(0)

Rust 的泛型实现是其类型系统的核心特性之一,它允许编写灵活且可重用的代码,同时保持类型安全和性能。以下从 泛型数据类型泛型类型参数trait bound生命周期泛型 四个方面详细介绍 Rust 的泛型实现,并解释编译器如何通过 静态分发 处理泛型。


1. 泛型数据类型

泛型数据类型允许你定义可以处理多种类型的结构体、枚举和函数,而无需为每种类型重复编写代码。

示例:泛型结构体

struct Point<T> {
   
    x: T,
    y: T,
}
  • Point<T> 是一个泛型结构体,T 是类型参数。
  • 你可以用任意类型实例化 Point,例如 Point<f32>Point<i32>

示例:泛型枚举

enum Option<T> {
   
    Some(T),
    None,
}
  • Option<T> 是标准库中的泛型枚举,T 是类型参数。
  • 它可以表示任意类型的值或空值。

2. 泛型类型参数

泛型类型参数用于在函数、方法或实现块中定义泛型。

示例:泛型函数

fn largest<T: PartialOrd>(list: &[T]) -> &T {
   
    let mut largest = &list[0];
    for item in list {
   
        if item > largest {
   
            largest = item;
        }
    }
    largest
}
  • T 是泛型类型参数。
  • PartialOrd 是 trait bound,表示 T 必须实现 PartialOrd trait。

示例:泛型方法

impl<T> Point<T> {
   
    fn new(x: T, y: T) -> Self {
   
        Point {
    x, y }
    }
}
  • impl<T> 为泛型结构体 Point<T> 实现方法。

3. Trait Bound

Trait bound 是对泛型类型参数的约束,用于指定泛型类型必须实现哪些 trait。

示例:简单 Trait Bound

fn print_debug<T: std::fmt::Debug>(value: T) {
   
    println!("{:?}", value);
}
  • T: std::fmt::Debug 表示 T 必须实现 Debug trait。

示例:多重 Trait Bound

fn clone_and_print<T: Clone + std::fmt::Debug>(value: T) {
   
    let cloned = value.clone();
    println!("{:?}", cloned);
}
  • T 必须同时实现 CloneDebug trait。

示例:where 语法

fn complex_function<T, U>(t: T

网站公告

今日签到

点亮在社区的每一天
去签到