跳到主要内容

泛型与 Trait

泛型让代码与具体类型解耦,Trait 则定义了类型必须满足的行为,二者结合是 Rust 多态的核心。

泛型函数与结构体

泛型参数用 <T> 声明,可在函数签名、结构体字段、impl 块等多处使用。编译器会为每个用到的具体类型生成单态化代码,运行时零开销。

struct Pair<T> { a: T, b: T }
impl<T> Pair<T> {
fn new(a: T, b: T) -> Self { Self { a, b } }
}

Trait 定义与实现

Trait 是方法的集合。impl Trait for Type 为具体类型实现行为。Trait 可以拥有默认实现,实现方可选择覆盖。

trait Greet { fn hi(&self) -> String; }
impl Greet for Pair<i32> {
fn hi(&self) -> String { format!("int pair") }
}

Trait Bound 与 where

泛型参数后跟 : Trait 即为 trait bound,约束传入类型必须实现该 trait。多个约束或复杂条件可放进 where 子句,提升可读性。

fn print<T>(v: T) where T: std::fmt::Debug {
println!("{:?}", v);
}

常用派生宏

#[derive(...)] 自动为结构体或枚举实现 trait,常见的有 Debug(格式化输出)、Clone(深拷贝)、PartialEq(等价比较)、Default(默认值)等,可显著减少样板代码。

#[derive(Debug, Clone, PartialEq)]
struct Point { x: i32, y: i32 }

结合泛型与 trait,既能写出高度抽象的库,又能在编译期捕获类型错误,这是 Rust 工程化的关键。