# Rust 闭包与迭代器

闭包是「能捕获环境的匿名函数」，迭代器让你用链式调用优雅地处理集合。两者是 Rust 函数式风格的两张王牌。

## 闭包

```rust
fn main() {
    let factor = 3;
    let mul = |x: i32| x * factor; // 捕获了 factor
    println!("{}", mul(4)); // 12
}
```

闭包语法 `|参数| 体`，常能靠类型推导省去标注。它能捕获周围变量（这是和普通函数最大的不同）。

## 迭代器

`Iterator` trait 提供 `map`、`filter`、`collect` 等惰性操作：

```rust
fn main() {
    let nums = vec![1, 2, 3, 4, 5];
    let doubled: Vec<i32> = nums
        .iter()
        .filter(|&&x| x % 2 == 0) // 只留偶数
        .map(|&x| x * 2)          // 翻倍
        .collect();               // 收集成 Vec
    println!("{:?}", doubled); // [4, 8]
}
```

## for 循环本质是迭代器

```rust
let v = vec![10, 20, 30];
for x in &v {
    println!("{}", x);
}
```

`for` 底层就是调用迭代器的 `next()`。

## 为什么好用

- 惰性求值：链式调用在 `collect` 前不真正计算，零成本抽象。
- 表达力强：一行替代多层循环，意图清晰。
- 与闭包配合，写出简洁又安全的集合处理。

## 小结

- 闭包捕获环境，写法 `|x| x + 1`。
- 迭代器用 `map/filter/collect` 链式处理数据。
- 习惯之后，你会发现很多循环都能被它取代。

➡️ [8. 模块系统与 Cargo](rust-08-modules-cargo.md)

