Rust 闭包与迭代器
目录
闭包是「能捕获环境的匿名函数」,迭代器让你用链式调用优雅地处理集合。两者是 Rust 函数式风格的两张王牌。
闭包
fn main() {
let factor = 3;
let mul = |x: i32| x * factor; // 捕获了 factor
println!("{}", mul(4)); // 12
}闭包语法 |参数| 体,常能靠类型推导省去标注。它能捕获周围变量(这是和普通函数最大的不同)。
迭代器
Iterator trait 提供 map、filter、collect 等惰性操作:
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 循环本质是迭代器
let v = vec![10, 20, 30];
for x in &v {
println!("{}", x);
}for 底层就是调用迭代器的 next()。
为什么好用
- 惰性求值:链式调用在
collect前不真正计算,零成本抽象。 - 表达力强:一行替代多层循环,意图清晰。
- 与闭包配合,写出简洁又安全的集合处理。
小结
- 闭包捕获环境,写法
|x| x + 1。 - 迭代器用
map/filter/collect链式处理数据。 - 习惯之后,你会发现很多循环都能被它取代。