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 } } } ``` 迭代器是零成本抽象——编译后的代码与手写循环一样高效。