Rust迭代器与闭包:函数式编程风格
3 阅读
预计 3 分钟
Rust的迭代器和闭包支持函数式编程风格,代码简洁且高效。
## 闭包
```rust
let add_one = |x: i32| -> i32 { x + 1 };
let add_one_v2 = |x| { x + 1 };
let add_one_v3 = |x| x + 1;
let x = 4;
let equal_to_x = |z| z == x;
```
## 闭包作为参数
```rust
fn apply(f: F, value: i32) -> i32
where
F: Fn(i32) -> i32,
{
f(value)
}
```
## Fn, FnMut, FnOnce
- Fn:不可变借用环境
- FnMut:可变借用环境
- FnOnce:获取环境所有权
## 迭代器适配器
```rust
let v = vec![1, 2, 3, 4, 5, 6];
let doubled: Vec = v.iter().map(|x| x * 2).collect();
let evens: Vec<&i32> = v.iter().filter(|x| *x % 2 == 0).collect();
let sum: i32 = v.iter().fold(0, |acc, x| acc + x);
let result: Vec = v.iter()
.filter(|x| *x % 2 == 0)
.map(|x| x * 3)
.collect();
```
## 自定义迭代器
```rust
struct Counter {
count: u32,
}
impl Counter {
fn new() -> Counter {
Counter { count: 0 }
}
}
impl Iterator for Counter {
type Item = u32;
fn next(&mut self) -> Option {
if self.count < 5 {
self.count += 1;
Some(self.count)
} else {
None
}
}
}
```
迭代器是零成本抽象——编译后的代码与手写循环一样高效。
0 条评论 欢迎参与讨论