【10】RUST的迭代器与闭包

闭包(Closures)

类比C++里的lambda表达式

闭包是能够捕获其所在环境变量的匿名函数,支持灵活的类型推断和多种捕获方式。

定义

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():获取元素的所有权(消耗集合)。
示例:

let vec = vec![1, 2, 3];
let mut iter = vec.iter(); // 不可变引用迭代器
assert_eq!(iter.next(), Some(&1));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值