泛型

September 23, 2024

Rust 中,泛型提供了一种用于编写函数、结构体、枚举和定义通用代码的方法。这样可以在不同类型上复用逻辑,提高代码的灵活性和可重用性。以下是泛型的核心概念和使用方法。

泛型函数

泛型函数允许你编写对多种类型都适用的函数。泛型参数通常采用大写字母:

fn largest<T: PartialOrd>(list: &[T]) -> &T {
    let mut largest = &list[0];
    for item in list.iter() {
        if item > largest {
            largest = item;
        }
    }
    largest
}

fn main() {
    let numbers = vec![1, 2, 3, 4, 5];
    println!("The largest number is {}", largest(&numbers));
}

泛型结构体

结构体也可以使用泛型来定义其字段的类型:

struct Point<T> {
    x: T,
    y: T,
}

fn main() {
    let integer_point = Point { x: 5, y: 10 };
    let float_point = Point { x: 1.0, y: 4.0 };
}

泛型枚举

枚举同样可以使用泛型:

enum Option<T> {
    Some(T),
    None,
}

这种方式使得枚举在 Rust 标准库中非常普遍。

泛型方法

可以在结构体和枚举上定义泛型方法:

impl<T> Point<T> {
    fn x(&self) -> &T {
        &self.x
    }
}

Trait Bounds

为了在泛型上施加约束,使用 trait bounds 确保泛型类型实现了特定的 trait:

fn print_info<T: std::fmt::Display>(item: T) {
    println!("{}", item);
}

多重约束

可以在泛型中同时设定多个约束:

fn compare_and_display<T: PartialOrd + std::fmt::Display>(a: T, b: T) {
    if a > b {
        println!("{} is greater than {}", a, b);
    } else {
        println!("{} is not greater than {}", a, b);
    }
}
最后更新于