# Rust 泛型与 Trait

泛型让你写「一套代码适配多种类型」，Trait 则定义「类型能做什么」。两者结合，是 Rust 抽象能力的核心。

![Rust 进阶：Trait 与泛型](https://img.zhaojq.top/20260804234640656.png "Rust 进阶：Trait 与泛型")

## 泛型函数

```rust
fn largest<T: PartialOrd + Copy>(list: &[T]) -> T {
    let mut max = list[0];
    for &item in list {
        if item > max { max = item; }
    }
    max
}
```

`<T: PartialOrd + Copy>` 表示：T 必须能比较大小、且可拷贝。

## 定义 Trait

Trait 像接口，描述一组方法签名：

```rust
trait Summary {
    fn title(&self) -> String;
    fn summarize(&self) -> String {
        format!("(摘要) {}", self.title()) // 默认实现
    }
}
```

## 为类型实现 Trait

```rust
struct Article { head: String }

impl Summary for Article {
    fn title(&self) -> String { self.head.clone() }
}

fn main() {
    let a = Article { head: "Rust 入门".into() };
    println!("{}", a.summarize());
}
```

## Trait Bound 作为参数

```rust
fn notify(item: &impl Summary) {
    println!("新消息: {}", item.summarize());
}
```

## 小结

- 泛型消除重复代码；Trait 限定能力边界。
- Trait 可有默认实现，子类型按需覆盖。
- 想要「鸭子类型」行为？`impl Trait` 最直观。

➡️ [6. 生命周期](rust-06-lifetime.md)

