文章目录
-
- 闭包(Closures)
- 定义
- 捕获方式:
- 迭代器(Iterator)
-
- 核心方法:
- 创建方式:
- 适配器(Adapter)
-
- 常见适配器及示例
- 消费方法(Consumer)
- 所有权与引用处理
- 性能与惰性求值
闭包(Closures)
类比C++里的lambda表达式
闭包是能够捕获其所在环境变量的匿名函数,支持灵活的类型推断和多种捕获方式。
定义
rust">fn add_one_v1
(x: u32) -> u32 {
x + 1 }
let add_one_v2 = |x: u32| -> u32 {
x + 1 };
let add_one_v3 = |x| {
x + 1 };
let add_one_v4 = |x| x + 1 ;
move || {
x }; //使用mov关键字强制获取所有权
缺省注解也需要主要,闭包只能应对单一数据类型。
捕获方式:
由编译器根据闭包体自动推断类型:
- FnOnce(所有闭包一定实现了该trait):获取变量的所有权(仅能调用一次)。
- Fn:通过不可变借用捕获变量(可多次调用)。
- FnMut:通过可变借用捕获变量(允许修改外部状态)。
迭代器(Iterator)
迭代器是实现了 Iterator trait 的类型,用于逐个访问集合中的元素。
核心方法:
next(&mut self) -> Option<Self::Item>
:返回下一个元素,若没有则返回 None。
创建方式:
iter()
:生成元素的不可变引用(&T
)。
iter_mut()
:生成元素的可变引用(&mut T
)。
into_iter()
:获取元素的所有权(消耗集合)。
示例:
rust">let vec = vec![1, 2, 3];
let mut iter = vec.iter(); // 不可变引用迭代器
assert_eq!(iter.next(